题目链接 P1198 [JSOI2008] 最大数
又又又懵了。。。。。。
哪位大神帮忙解决下,哪里的问题。。。。。。
错误的代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long intt;
intt m,p;
struct node{
intt l,r;
intt num;
}c[800080];
void build_the_tree(intt i,intt l,intt r){
c[i].l=l;
c[i].r=r;
c[i].num=0;
if(l==r){
return ;
}
intt mid=(l+r)>>1;
build_the_tree(i*2,l,mid);
build_the_tree(i*2+1,mid+1,r);
}
void add(intt i,intt x,intt z){
if(c[i].l==x&&c[i].r==x){
c[i].num=z;
return ;
}
intt mid=(c[i].l+c[i].r)>>1;
if(x<=mid){
add(i*2,x,z);
}else{
add(i*2+1,x,z);
}
c[i].num=max(c[i*2].num,c[i*2+1].num);
}
intt ask_the_answer(intt i,intt l,intt r){
intt ans=-0x3f3f3f3f3f3f3f3f;
if(c[i].l>=l&&c[i].r<=r){
return c[i].num;
}
intt mid=(c[i].l+c[i].r)>>1;
if(l<=mid){
ans=max(ans,ask_the_answer(i*2,l,r));
}
if(r>mid){
ans=max(ans,ask_the_answer(i*2+1,l,r));
}
return ans;
}
int main(){
scanf("%lld%lld",&m,&p);
build_the_tree(1,1,m);
char s,huanhang;
intt a,sum=0,lastnum=0;
for(int i=1;i<=m;i++){
scanf("%c%c%lld",&huanhang,&s,&a);
if(s=='A'){
sum++;
a=(a+lastnum)%p;
add(1,sum,a);
}else{
lastnum=ask_the_answer(1,sum-a+1,sum);
printf("%lld\n",lastnum);
}
}
return 0;
}