本文主要是介绍hdu1166(树状数组,点修改,区间求和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:点击打开链接
//题目大意:一个序列,三种操作
// 1、add 某个点增加
// 2、sub 某个点减少
// 3、query 区间求和#include <iostream>
#include <algorithm>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define ll long long
#define mod 1000000007
#define N 3using namespace std;int c[50050];void add(int x, int d)
{while(x<= 55000){c[x]+= d;x+= x&-x;}
}int sum(int x)
{int s= 0;while(x){s+= c[x];x-= x&-x;}return s;
}int main()
{int T; cin >> T;for(int k= 1; k<= T; k++){int n, a; scanf("%d", &n);memset(c, 0, sizeof(c));for(int i= 1; i<= n; i++) { scanf("%d", &a); add(i, a); }char s[10]; int x, y;printf("Case %d:\n", k);while(scanf("%s", s)== 1 && s[0]!= 'E'){scanf("%d%d", &x, &y);if(s[0]== 'Q') printf("%d\n", sum(y)- sum(x- 1));if(s[0]== 'A') add(x, y);if(s[0]== 'S') add(x, -y);}}return 0;
}
这篇关于hdu1166(树状数组,点修改,区间求和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!