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编辑  收藏  举报

导航