标签:style blog http color io os ar java for
1 10 1 2 3 4 5 6 7 8 9 10 Query 1 3 Add 3 6 Query 2 7 Sub 10 2 Add 6 3 Query 3 10 End
Case 1: 6 33 59
解题:线段树。。。试一下zkw线段树。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #include <stack> 13 #define LL long long 14 #define pii pair<int,int> 15 #define INF 0x3f3f3f3f 16 using namespace std; 17 const int maxn = 50005; 18 int tree[maxn<<2],M; 19 void build(int n){ 20 M = 1<<((int)log2(n)+1); 21 for(int i = M + 1; i <= M + n; i++) 22 scanf("%d",tree+i); 23 for(int i = M - 1; i > 0; --i) 24 tree[i] = tree[i<<1] + tree[i<<1|1]; 25 } 26 void add(int n,int val){ 27 for(tree[n += M] += val,n >>= 1; n; n >>= 1) 28 tree[n] = tree[n<<1] + tree[n<<1|1]; 29 } 30 int query(int s,int t){ 31 int ans = 0; 32 s += M - 1; 33 t += M + 1; 34 while(s^t^1){ 35 if(~s&1) ans += tree[s^1]; 36 if(t&1) ans += tree[t^1]; 37 s >>= 1; 38 t >>= 1; 39 } 40 return ans; 41 } 42 int main() { 43 int t,n,x,y,cs = 1; 44 char s[12]; 45 scanf("%d",&t); 46 while(t--){ 47 scanf("%d",&n); 48 memset(tree,0,sizeof(tree)); 49 build(n); 50 printf("Case %d:\n",cs++); 51 while(true){ 52 scanf("%s",s); 53 if(s[0] == ‘E‘) break; 54 scanf("%d %d",&x,&y); 55 if(s[0] == ‘Q‘) 56 printf("%d\n",query(x,y)); 57 else if(s[0] == ‘A‘) 58 add(x,y); 59 else if(s[0] == ‘S‘) 60 add(x,-y); 61 } 62 } 63 return 0; 64 }
标签:style blog http color io os ar java for
原文地址:http://www.cnblogs.com/crackpotisback/p/4009747.html