codeforce A
对于一些查询操作的题目,可以先将需要查询的结果保存下来,然后进行输出。
题目:对于一个数组a,1的区间[0,a1),2的区间[a1,a1+a2),3的区间[a1+a2,a1+a2+a3),。。。。以此类推,另外,[a1+a2+....+an,0)..给出若干个查询操作,问查询k属于` 哪个区间。。。
1 ll sum[maxn],a[maxn]; 2 struct query 3 { 4 ll x,y,z; 5 }q[maxn]; 6 7 int cmp(const query&a,const query&b) 8 { 9 return a.x<b.x; 10 } 11 int cmp1(const query &a,const query &b) 12 { 13 return a.y<b.y; 14 } 15 int main() 16 { 17 memset(sum,0,sizeof(sum)); 18 int n,m; 19 scanf ("%d %d",&n,&m); 20 for (int i=1;i<=n;i++) 21 { 22 scanf ("%I64d",&a[i]); 23 sum[i]+=a[i]+sum[i-1]; 24 25 } 26 for(int i=1;i<=m;i++) 27 { 28 ll temp; 29 scanf ("%I64d",&temp); 30 q[i].x=temp; 31 q[i].x%=sum[n]; 32 q[i].y=i; 33 } 34 sort(q+1,q+m+1,cmp); 35 int j=1; 36 for(int i=1;i<=m;i++) 37 { 38 while (q[i].x>=sum[j] && j<n) 39 j++; 40 q[i].z=j; 41 } 42 sort(q+1,q+m+1,cmp1); 43 for(int i=1;i<=m;i++) 44 { 45 printf("%I64d\n",q[i].z); 46 } 47 return 0; 48 }
大概就是这样。。学习了
posted on 2015-08-10 12:11 Bei_insomia 阅读(121) 评论(0) 编辑 收藏 举报