HDU5875:Function

题目链接:

Function

分析:

icpccamp里的方法不会,我用了一个nex[]数组存储当前点ai需要取模的下一个点aj的编号j,如果aj>ai,就不用遍历。

时间为920ms

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int t,n,q,l,r,a[100100],nex[100100];
 7 
 8 int main()
 9 {
10     for(scanf("%d",&t);t--;)
11     {
12         scanf("%d",&n);
13         for(int i=1;i<=n;++i) scanf("%d",a+i);
14         for(int i=1;i<=n;++i)
15         {
16             nex[i]=-1;
17             for(int j=i+1;j<=n;++j) if(a[j]<=a[i]) {
18                 nex[i]=j;
19                 break;
20             }
21         }
22         scanf("%d",&q);
23         while(q--)
24         {
25             scanf("%d %d",&l,&r);int x=a[l];
26             for(int j=nex[l];j<=r;j=nex[j])
27             {
28                 if(j==-1) break;
29                 x%=a[j];
30             }
31             printf("%d\n",x);
32         }
33     }
34 } 
View Code

 

posted @ 2016-09-12 16:09  遗风忘语  阅读(166)  评论(0编辑  收藏  举报