ZOJ 3279 樹狀陣列 題庫221頁
阿新 • • 發佈:2019-01-26
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 ; }