序列的区间操作
2017-03-14 23:52
155 查看
问题 W: 序列的区间操作
时间限制: 2 Sec 内存限制: 256 MB题目描述
给你[1, N]共N个数,和Q次操作,每次操作将区间[x, y]里面的数全加v。要求你按顺序输出Q次操作后这N个数。
输入
有多组测试数据,请处理到文件结束。每组数据给定两个整数N和Q,接下来有Q行,表示Q次操作。每行有三个整数x、y、v。
后台数据保证均满足 1 <= N, Q <= 10^7 且 1 <= x <= y <= 10^7,1 <= v <= 10^7。
输出
每组数据输出N个整数,每两个整数之间有一个空格,最后一个数后面没有空格。由于最后的数可能比较大,你只需要输出% 666666的结果。
样例输入
1 1 1 1 3 2 2 1 1 3 2 2 1
样例输出
4 4 3
思路:一开始出发点在两端点,把端点都加上v,可是无法解决重复此区间的数据,最后看了师傅博客发现,我一开始思路就是错的,只需要在[x,y]之间,x比x-1多v,y+1比y少v;
吸取的教训就是,想了好久却无法实现一些数据,要从原点出发,重新找思路,思路正确,代码就稍微简单了;
#include<cstdio>
#include<cstring>
int a[10000005];
int main()
{
int n,q;
while(scanf("%d %d",&n,&q)!=EOF)
{
memset(a,0,sizeof(a));
int x,y,k,ans=0;
for(int i=1;i<=q;i++)
{
scanf("%d %d %d",&x,&y,&k);
a[x]+=k;
a[y+1]-=k;
}
for(int i=1;i<=n;i++)
{
ans=a[i]+ans+1;
if(i>1) printf(" ");
printf("%d",ans%666666);
}
printf("\n");
}
return 0;
}
相关文章推荐
- 【周练2016.3.5】序列的区间操作(对区间的操作,好题)
- 序列的区间操作(对区间的操作,好题)
- BZOJ 1858: [Scoi2010]序列操作 线段树区间修改查询
- hdu3397 Sequence operation 线段树区间更新&&bzoj1858: [Scoi2010]序列操作
- 【HPU】[1732]序列的区间操作
- [bzoj2962]序列操作_线段树_区间卷积
- 【bzoj1858】[Scoi2010]序列操作 线段树区间合并
- HYSBZ 1798(Ahoi2009) Seq 维护序列seq(区间更新+加法乘法混合操作)
- 【BZOJ-2962】序列操作 线段树 + 区间卷积
- 问题 K: 序列的区间操作
- HYSBZ 1858(Scoi2010) 序列操作(线段树+区间合并)
- 问题 K: 序列的区间操作【区间加法】【思维】【数学】
- bzoj1858:序列操作 (线段树区间信息合并)
- 不会改变操作对象内容的STL算法(元素查找,序列查找,统计元素个数,比较区间,找最值)
- 【BZOJ 1858】【SCOI 2010】序列操作【区间线段树】
- 【HPU OJ 1310 】序列的区间操作 【思维】
- Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)
- 南邮OJ 2027 操作序列
- hdu 3911 Black And White 一串0 1的数字 操作将一段区间[ i , j ]的每个数字进行异或操作 问区间最长0|1串
- bzoj 1858: [Scoi2010]序列操作 -- 线段树