CF 179(div2) C(线段树 || 扫描法 )
来源:互联网 发布:历史非农数据 编辑:程序博客网 时间:2024/05/18 08:01
Greg has an array a = a1, a2, ..., an andm operations. Each operation looks as: li, ri, di, (1 ≤ li ≤ ri ≤ n). To apply operationi to the array means to increase all array elements with numbersli, li + 1, ..., ri by valuedi.
Greg wrote down k queries on a piece of paper. Each query has the following form:xi,yi,(1 ≤ xi ≤ yi ≤ m). That means that one should apply operations with numbersxi, xi + 1, ..., yi to the array.
Now Greg is wondering, what the array a will be after all the queries are executed. Help Greg.
The first line contains integers n, m, k (1 ≤ n, m, k ≤ 105). The second line containsn integers: a1, a2, ..., an(0 ≤ ai ≤ 105) — the initial array.
Next m lines contain operations, the operation numberi is written as three integers: li, ri, di, (1 ≤ li ≤ ri ≤ n),(0 ≤ di ≤ 105).
Next k lines contain the queries, the query numberi is written as two integers: xi, yi, (1 ≤ xi ≤ yi ≤ m).
The numbers in the lines are separated by single spaces.
On a single line print n integers a1, a2, ..., an — the array after executing all the queries. Separate the printed numbers by spaces.
Please, do not use the %lld specifier to read or write 64-bit integers inC++. It is preferred to use the cin, cout streams of the %I64d specifier.
3 3 31 2 31 2 11 3 22 3 41 21 32 3
9 18 17
1 1 111 1 11 1
2
4 3 61 2 3 41 2 12 3 23 4 41 21 32 31 21 32 3
for(int i = 1;i <= m;i++){ countn[l[i]-1] += d[i];countn[r[i]] -= d[i];}sum = 0;for(int i = 0;i <= n;i++){ a[i] += sum;sum += countn[i];}读者自己动手模拟一遍就能看出里面的思路了
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define LL long longusing namespace std;const int maxn = 100100;LL a[maxn],l[maxn],r[maxn],d[maxn];LL countn[maxn],ll[maxn],rr[maxn];int main(){ int n,m,k; while(scanf("%d%d%d",&n,&m,&k) != EOF){ for(int i = 1;i <= n;i++) cin >> a[i]; for(int i = 1;i <= m;i++) cin >> l[i] >> r[i] >> d[i]; memset(countn,0,sizeof(countn)); for(int i = 0;i < k;i++){ int teml,temr; cin >> teml >> temr; countn[teml-1] += 1;countn[temr] -= 1; } LL sum = 0; for(int i = 0;i <= m;i++){ d[i] *= sum; sum += countn[i]; } memset(countn,0,sizeof(countn)); for(int i = 1;i <= m;i++){ countn[l[i]-1] += d[i];countn[r[i]] -= d[i]; } sum = 0; for(int i = 0;i <= n;i++){ a[i] += sum;sum += countn[i]; } for(int i = 1;i < n;i++) cout << a[i] << ' '; cout << a[n] << endl; } return 0;}
- CF 179(div2) C(线段树 || 扫描法 )
- CF-Div2-207-C题+线段树
- CF 296 div2 C. Glass Carving (线段树)
- CF 191 div2 C
- CF 143 div2 C
- CF-div2-192-C
- CF 188 (div2 C)
- cf 208 div2 C
- CF div2(225) C
- CF #284 div2 C
- CF 349div2 C
- CF div2 C
- CF#248DIV2:B. Kuriyama Mirai's Stones(线段树)
- CF #278 div2 D Strip 线段树+优先队列
- CF 275 div2 D. Interesting Array (线段树)
- cf/Codeforces Round #373 div1-C/div2-E Sasha and Array 线段树 + 维护矩阵快速幂
- CF 174(div2) C
- CF 171 (div2)C
- UVA 10006
- 75道逻辑思维题
- 数据的排序:(order by)
- 关于PM的几个问题
- 常用的sql函数
- CF 179(div2) C(线段树 || 扫描法 )
- hadoop学习问题记录
- 子查询
- ]把刽子手曾国藩吹捧为中兴名臣意在何为
- c++程序设计原理与实践---(2)错误?错误!
- “十天一本书”之八——《思路决定出路》与马云卸任的一点感想
- c++反射机制的实现(完整代码,相当靠谱)
- 马云:信任让我成功 让我有了今天(演讲全文)
- 从image/x-png谈文件上传中的ContentType属性