bzoj 1012 最大数maxnumber

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1012

题解:

  直接创建一个宽度为200000的线段树,然后就是单点修改和区间查询操作了

  不开long long见祖宗,十年OI一场空!

 1 #include<cstdio>
 2 #define LL long long
 3 #define MAXN 800010
 4 LL n=200000,m,MOD,y,y1,y2,v,t,maxv[MAXN];
 5 inline LL max(LL x,LL y)
 6 {
 7     return x>y?x:y;
 8 }
 9 void update(LL o,LL L,LL R)
10 {
11     LL lc=o<<1,rc=o<<1|1,M=(L+R)>>1;
12     if(L==R)
13     {
14         maxv[o]=v;
15         return;
16     }
17     if(y<=M)update(lc,L,M);
18     else update(rc,M+1,R);
19     maxv[o]=max(maxv[lc],maxv[rc]);
20 }
21 LL query(LL o,LL L,LL R)
22 {
23     LL lc=o<<1,rc=o<<1|1,M=(L+R)>>1;
24     if(L>=y1&&R<=y2)return maxv[o];
25     LL ans=0;
26     if(y1<=M)ans=max(ans,query(lc,L,M));
27     if(y2>M)ans=max(ans,query(rc,M+1,R));
28     return ans;
29 }
30 int main()
31 {
32     scanf("%lld %lld",&m,&MOD);
33     while(m--)
34     {
35         char t1;
36         LL t2;
37         scanf("\n%c ",&t1);
38         scanf("%lld",&t2);
39         if(t1=='A')
40         {
41             v=(t2+t)%MOD;
42             ++y;
43             update(1,1,n);
44         }
45         else
46         {
47             y1=y-t2+1;y2=y;
48             t=query(1,1,n);
49             printf("%lld\n",t);
50         }
51     }
52     return 0;
53 }

 

posted @ 2016-10-16 19:42  xqmmcqs  阅读(172)  评论(0编辑  收藏  举报