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;}

原创粉丝点击