200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > LightOJ 1112 - Curious Robin Hood 树状数组

LightOJ 1112 - Curious Robin Hood 树状数组

时间:2022-04-03 02:49:46

相关推荐

LightOJ 1112 - Curious Robin Hood 树状数组

题目链接

题意:

给定一个序列,有三个操作

1 i 输出第i个数的大小,并将其变为02 i v 第i个数增加v3 i j 输出第i个数到第j个数的和

树状数组模板题

#include <stdio.h>#include <iostream>#include <string.h>#include <stdlib.h>#include <vector>#include <algorithm>#include <queue>#include <map>#include <stack>#include <string>#include <math.h>#include <bitset>#include <ctype.h>using namespace std;typedef pair<int,int> P;typedef long long LL;const int INF = 0x3f3f3f3f;const double PI = acos(-1.0);const double eps = 1e-9;const int N = 1e5 + 5;const int mod = 1e9 + 7;int t, kase = 0;int c[N];int n,q,type,x,y;inline int lowbit(int i){return i&(-i);}void add(int x, int val){while(x <= n){c[x] += val;x += lowbit(x);}}int sum(int x){int res = 0;while(x){res += c[x];x -= lowbit(x);}return res;}int main(){scanf("%d", &t);while(t--){printf("Case %d:\n", ++kase);scanf("%d%d", &n, &q);memset(c, 0, sizeof(c));for(int i = 1; i <= n; i++){scanf("%d", &x);add(i, x);}while(q--){scanf("%d", &type);if(type == 1){scanf("%d", &x);x++;int ans = sum(x) - sum(x-1);add(x, -ans);printf("%d\n", ans);}else if(type == 2){scanf("%d%d", &x,&y);x++;add(x, y);}else{scanf("%d%d", &x, &y);x++;y++;int ans = sum(y) - sum(x-1);printf("%d\n", ans);}}}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。