序列的区间操作

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值