ZOJ 3279 树状数组 题库221页

来源:互联网 发布:无忧call网络电话软件 编辑:程序博客网 时间:2024/06/05 22:32


const  int  maxn =  100008 ;int  x[maxn] , n ;int  lowbit(int x){     return x & (-x) ;}void  add(int i , int c){      while(i <= n){           x[i] += c ;           i += lowbit(i) ;      }}int   sum(int i){      int s = 0 ;      while(i >= 1){           s += x[i] ;           i -= lowbit(i) ;      }      return s ;}int   a[maxn]  ;int  main(){     int  i , m , d ;     char ch[2] ;     while(scanf("%d" , &n) != EOF){           memset(x , 0 , sizeof(x)) ;           for(i = 1 ; i <= n ; i++){                scanf("%d" , &a[i]) ;                add(i , a[i]) ;           }           scanf("%d" , &m) ;           while(m--){               scanf("%s" , ch) ;               if(ch[0] == 'p'){                    scanf("%d%d" , &i , &d) ;                    add(i , d - a[i]) ;                    a[i] = d ;               }               else{                    scanf("%d" , &d) ;                    int l = 1 , r = n , mid  , s ;                    while(l <= r){                         mid = (l + r) >> 1  ;                         if(sum(mid) >= d){                              s = mid ;                              r = mid - 1 ;                         }                         else  l = mid + 1 ;                    }                    printf("%d\n" , s) ;               }           }     }     return 0 ;}


0 0
原创粉丝点击