hdu 1166 ~

来源:互联网 发布:如何改淘宝的主营类目 编辑:程序博客网 时间:2024/05/22 03:24

线段树第一步~

是找了别人的模板~~

看明天自己能不能写一遍看看~




//by Goner#include <stdio.h>const int maxn = 50010;int sum[maxn * 4];void PushUP(int rt) {sum[rt] = sum[rt * 2] + sum[rt * 2 + 1];}void build(int l, int r, int rt) {if (l == r) {scanf("%d", &sum[rt]);return ;}int m = (l + r) / 2;build(l, m, rt * 2);build(m + 1, r, rt * 2 + 1);PushUP(rt);}void update(int p, int add, int l, int r, int rt) {if (l == r) {sum[rt] += add;return ;}int m = (l + r) / 2;if (p <= m) update(p, add, l, m, rt * 2);else update(p, add, m + 1, r, rt * 2 + 1);PushUP(rt);}int query(int L,int R,int l,int r,int rt) {if (L <= l && r <= R) {return sum[rt];}int m = (l + r) / 2;int ret = 0;if (L <= m) ret += query(L , R , l, m, rt * 2);if (R > m) ret += query(L , R , m + 1, r, rt * 2 + 1);return ret;}int main() {int T , n;scanf("%d",&T);for (int cas = 1 ; cas <= T ; cas ++) {printf("Case %d:\n",cas);scanf("%d",&n);build(1 , n , 1);char op[10];while (scanf("%s",op)) {if (op[0] == 'E') break;int a , b;scanf("%d%d",&a,&b);if (op[0] == 'Q') printf("%d\n",query(a , b , 1 , n , 1));else if (op[0] == 'S') update(a , -b , 1 , n , 1);else update(a , b , 1 , n , 1);}}return 0;}


	
				
		
原创粉丝点击