码迷,mamicode.com
首页 > Web开发 > 详细

[BZOJ1012][JSOI2008]最大数maxnumber 线段树

时间:2017-08-29 20:34:02      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   number   amp   维护   read   logs   最大数   cstring   scanf   

没什么好说的……线段树维护区间就行了。第一次居然写错了,真丢人。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 typedef long long ll;
 6 ll inline readll(){
 7     ll Num;char ch;
 8     while((ch=getchar())<0||ch>9);Num=ch-0;
 9     while((ch=getchar())>=0&&ch<=9) Num=Num*10+ch-0;
10     return Num;
11 }
12 void outll(ll x){
13     if(x>=10) outll(x/10);
14     putchar(x%10+0);
15 }
16 int mx[200010<<2],len=0;
17 #define lson l,mid,rt<<1
18 #define rson mid+1,r,rt<<1|1
19 void Pushup(int &rt){
20     mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);
21 }
22 void Add(int l,int r,int rt,int pos,int x){
23     if(l==r){
24         mx[rt]=x;
25         return;
26     }
27     int mid=l+r>>1;
28     if(pos<=mid) Add(lson,pos,x);
29     else Add(rson,pos,x);
30     Pushup(rt);
31 }
32 int Qry(int l,int r,int rt,int L,int R){
33     if(l>=L&&R>=r) return mx[rt];
34     int mid=l+r>>1,ret=0;
35     if(L<=mid) ret=max(ret,Qry(lson,L,R));
36     if(R>mid) ret=max(ret,Qry(rson,L,R));
37     return ret;
38 }
39 int main(){
40     int m=readll(),
41         d=readll();
42     char opt[5];
43     ll t=0,num;
44     memset(mx,0,sizeof(mx));
45     for(int i=1;i<=m;i++){
46         scanf("%s",opt);
47         num=readll();
48         if(opt[0]==A) Add(1,m,1,++len,(num%d+t%d)%d);
49         else{
50             t=Qry(1,m,1,len-num+1,len);
51             outll(t);
52             putchar(\n);
53         }
54     }
55     return 0;
56 }

 

[BZOJ1012][JSOI2008]最大数maxnumber 线段树

标签:style   number   amp   维护   read   logs   最大数   cstring   scanf   

原文地址:http://www.cnblogs.com/halfrot/p/7449885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!