建设培训网站,橙米网站建设,wordpress特别版,什么样的蓝色做网站做好看题目描述
又到了丰收的季节#xff0c;恰逢小易去牛牛的果园里游玩。 牛牛常说他对整个果园的每个地方都了如指掌#xff0c;小易不太相信#xff0c;所以他想考考牛牛。 在果园里有N堆苹果#xff0c;每堆苹果的数量为ai#xff0c;小易希望知道从左往右数第x个苹果是属…题目描述
又到了丰收的季节恰逢小易去牛牛的果园里游玩。 牛牛常说他对整个果园的每个地方都了如指掌小易不太相信所以他想考考牛牛。 在果园里有N堆苹果每堆苹果的数量为ai小易希望知道从左往右数第x个苹果是属于哪一堆的。 牛牛觉得这个问题太简单所以希望你来替他回答。
输入描述:
第一行一个数n(1 n 105)。
第二行n个数ai(1 ai 1000)表示从左往右数第i堆有多少苹果
第三行一个数m(1 m 105)表示有m次询问。
第四行m个数qi表示小易希望知道第qi个苹果属于哪一堆。
输出描述:
m行第i行输出第qi个苹果属于哪一堆。
示例1
输入
复制
5
2 7 3 4 9
3
1 25 11
输出
复制
1
5
3
先将要输入的多组询问排序之后从头开始遍历苹果堆如果连数值较小的询问当前都无法满足那么大的询问自然无法满足
之后再将询问恢复之前的次序输出即可
#includestdio.h #includeiostream #include algorithm using namespace std; typedef struct Test1 { int Num; //记录各次询问的值 int No; //记录各询问一开始的序号方便最后恢复次序 int flag; //记录属于第几堆 }Test; bool cmp1(Test x,Test y) { return x.Numy.Num; } bool cmp2(Test x,Test y) { return x.Noy.No; } int main() { int n,m,i,sum0,j; scanf(%d,n); int a[n]; for(i0;in;i) { scanf(%d,a[i]); } scanf(%d,m); Test b[m]; for(i0;im;i) { scanf(%d,b[i].Num); b[i].Noi; } sort(b,bm,cmp1); j0; suma[0]; for(i0;im;) { if(b[i].Numsum) { b[i].flagj; i; } else { jj1; suma[j]; } } sort(b,bm,cmp2); for(i0;im;i) { printf(%d\n,b[i].flag1); } }