uva 12086 - Potentiometers
来源:互联网 发布:gts450 mac 最新驱动 编辑:程序博客网 时间:2024/04/30 02:49
线段树or树状数组均可以做此题,不过树状数组的代码量要小:
//#pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <stack>#include <queue>#include <cstdio>#include <cstdlib>#include <cmath>#include <set>#include <vector>#include <cstring>#include <algorithm>#define INF 0x3fffffff#define inf -0x3f3f3f3f#define N 200010#define M 4000010#define LL long long#define mod 20071027using namespace std;int n;int d[N], arr[N];int lowbit(int x){ return x & (-x);}void add(int x, int val){ while(x <= n){ d[x] += val; x += lowbit(x); }}int sum(int x){ int s = 0; while(x > 0){ s += d[x]; x -= lowbit(x); } return s;}int main() { // freopen("in.txt", "r", stdin); int t = 0; while(scanf("%d", &n) != EOF){ if(! n) break; memset(d, 0, sizeof(d)); for(int i = 1; i <= n; ++ i){ scanf("%d", &arr[i]); add(i, arr[i]); } if(t) puts(""); printf("Case %d:\n", t + 1); char str[5]; while(scanf("%s", str) != EOF){ if(str[0] == 'E') break; int l, r; scanf("%d %d", &l, &r); if(str[0] == 'S'){ add(l, r - arr[l]); arr[l] = r; continue; } printf("%d\n", sum(r) - sum(l - 1)); } ++ t; // printf(" %d\n", d[2]); } return 0;}