int main(){ int N,x; scanf("%d",&N); SegTree* ST = new SegTree(N); for(int i=1;i<=N;i++){ scanf("%d",&x); ST->A[i] = x; } ST->initialize(1, 1, N); int Q; scanf("%d",&Q); int type, y; while(Q--) { scanf("%d %d %d", &type, &x, &y); if(type==0) ST->update(1, 1, N, x, y); else { Node* ans = ST->query(1, 1, N, x, y); printf("%d\n",ans->maxs); } } }
void initSeg(int n){ int l=0; int r=0; segr.n = n; segl.n = n; for(int i=0;i<SIZE*2-1;i++){ segl.node[i]=20000; segr.node[i]=20000; } for(int i=0;i<n;i++){ if(S[i] == '('){ l++; r++; segl.update(i,l); segr.update(i,r); no[i]++; } if(S[i] == ')'){ l--; r--; segl.update(i,l); segr.update(i,r); nc[i]++; } if(S[i] == '?'){ l++; r--; segl.update(i,l); segr.update(i,r); nq[i]++; } no[i+1]=no[i]; nc[i+1]=nc[i]; nq[i+1]=nq[i]; } }