1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
void init(){ for(int i=1;i<=n;i++){ c[i]=a[i]; for(int j=1;j<lb(i);j<<=1) c[i]=max(c[i],c[i-j]); } } void update(int x,int s){ a[x]=s; for(;x<=n;x+=lb(x)){ c[x]=s; for(int i=1;i<lb(x);i<<=1) c[x]=max(c[x],c[x-i]); } }
int ask(int l,int r){ int ans=a[r]; while(1){ ans=max(ans,a[r]); if(l==r) break; for(r--;r-lb(r)>=l;r-=lb(r)) ans=max(ans,c[r]); } return ans; }
|
近期评论