最大數【JSOI2008】【樹狀陣列】
阿新 • • 發佈:2018-12-15
傳送門:https://www.luogu.org/problemnew/show/P1198
一道變式樹狀陣列
區別是從末尾開始建點
其他操作沒有變
差不多就是這樣,,很水的一道題
上程式碼
#include<bits/stdc++.h> #define in read() using namespace std; int in{ int cnt=0,f=1;char ch=0; while(!isdigit(ch)){ ch=getchar(); if(ch=='-')f=-1; } while(isdigit(ch)){ cnt=cnt*10+ch-48; ch=getchar(); } return cnt*f; } int cnt; int d[200003]; int n,p;int last; int lowbit(int x){ return x&(-x); } void update(int x,int k){ while(x<=200000){ d[x]=max(d[x],k); x+=lowbit(x); } } int query(int x){ int ans=-1; while(x!=0){ ans=max(ans,d[x]); x-=lowbit(x); } return ans; } int main(){ n=in;p=in; char c;int x;int pos=200000; while(n--){ cin>>c;x=in; if(c=='A'){ update(pos,(x+last)%p); pos--; } else{ int y=pos+x; printf("%d\n",query(y)); last=query(y); } } return 0; }
一定小心邊界問題,,包括該不該+-1都需要考慮一下,,雖然這道題不需要ovo