做网站什么东西需要费用,开什么加工厂不愁销路,直播软件的app,做网站开发需要学什么C国的死对头A国这段时间正在进行军事演习#xff0c;所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段#xff0c;所以每个工兵营地的人数C国都掌握的一… C国的死对头A国这段时间正在进行军事演习所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动而Derek每次询问的段都不一样所以Tidy不得不每次都一个一个营地的去数很快就精疲力尽了Derek对Tidy的计算速度越来越不满:你个死肥仔算得这么慢我炒你鱿鱼!”Tidy想“你自己来算算看这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说“死肥仔叫你平时做多点acm题和看多点算法书现在尝到苦果了吧!”Tidy说我知错了。。。但Windbreaker已经挂掉电话了。Tidy很苦恼这么算他真的会崩溃的聪明的读者你能写个程序帮他完成这项工作吗不过如果你的程序效率不够高的话Tidy还是会受到Derek的责骂的. Input第一行一个整数T表示有T组数据。 每组数据第一行一个正整数NN50000,表示敌人有N个工兵营地接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人1ai50。 接下来每行有一条命令命令有4种形式 (1) Add i j,i和j为正整数,表示第i个营地增加j个人j不超过30 (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人j不超过30; (3)Query i j ,i和j为正整数,ij表示询问第i到第j个营地的总人数; (4)End 表示结束这条命令在每组数据最后出现; 每组数据最多有40000条命令 Output对第i组数据,首先输出“Case i:”和回车, 对于每个Query询问输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。 Sample Input1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End Sample OutputCase 1:
6
33
59题解这是一道线段树区间修改的问题按照模版去屑写就可以水题加减是一样的AC代码为#includecstdio#includecmath#includecstring#includeiostreamusing namespace std;using namespace std; const int mxn 50000 10; struct node { int l, r, maxn, sum;}tree[mxn2]; int t, n; char str[10]; int x, y; int a[mxn]; void build(int m, int l, int r) { tree[m].l l; tree[m].r r; if (l r) { tree[m].sum a[l]; return; } int mid (l r) 1; build(m 1, l, mid); build((m 1) 1, mid 1, r); tree[m].sum tree[m 1].sum tree[(m 1) 1].sum; } void update(int m, int a, int val){ if (tree[m].l a tree[m].r a) { tree[m].sum val; return; } int mid (tree[m].l tree[m].r) 1; if (a mid) update(m 1, a, val); else update((m 1) 1, a, val); tree[m].sum tree[m 1].sum tree[(m 1) 1].sum; } int query(int m, int l, int r) { if (l tree[m].l r tree[m].r) return tree[m].sum; int mid (tree[m].l tree[m].r) 1; if (r mid) return query(m 1, l, r); if (l mid) return query((m 1) 1, l, r); return query(m 1, l, mid) query((m 1) 1, mid 1, r); } int main() { int k 0; scanf(%d, t); while (t--) { scanf(%d, n); for (int i 1; i n; i) scanf(%d, a[i]); printf(Case %d:\n, k); build(1, 1, n); while (scanf(%s, str)) { if (str[0] E) break; if (str[0] A) { scanf(%d %d, x, y); update(1, x, y); } if (str[0] S) { scanf(%d %d, x, y); update(1, x, -y); } if (str[0] Q) { scanf(%d %d, x, y); printf(%d\n, query(1, x, y)); } } } return 0; } 转载于:https://www.cnblogs.com/songorz/p/9386572.html