Beispiel #1
0
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);
        }
    }
}
Beispiel #2
0
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];
  }
}