【周练2016.3.5】序列的区间操作(对区间的操作,好题)
来源:互联网 发布:nginx ip绑定域名 编辑:程序博客网 时间:2024/04/28 12:03
序列的区间操作
时间限制: 1 Sec 内存限制: 256 MB提交: 33 解决: 5
[提交][状态][讨论版]
题目描述
给你[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 11 1 32 21 1 32 2 1
样例输出
44 3
提示
注意题目的数据范围,这要求每次操作时间复杂度要是log级别的。
还有考虑题目的内存限制。
这道题用到的知识点同样是以前没有学过的:
有一段序列,先假设都是0把: 0 0 0 0 0 0(6个0,表示a[1] a[2] a[3] a[4] a[5] a[6] )
比如对(l,r)都加上n
则可以这么操作:a[ l ] += n a[ r +1 ] -=n
操作完后的数组 a[n] = a[1] + a[2] + ...... +a[n]
叫不上名字的知识点,但是这种题却是得用,要不就算是用线段树也得TLE
代码如下:
#include <cstdio>#define MOD 666666#include <cstring>int a[10000222];int main(){int n,Q;while (~scanf ("%d %d",&n,&Q)){memset (a,0,sizeof (a));while (Q--){int x,y,s;scanf ("%d %d %d",&x,&y,&s);a[x] = a[x] + s;a[y+1] = a[y+1] - s;}for (int i=2 ; i <= n ; i++){a[i] = a[i-1] + a[i];while (a[i]<0)a[i]+=MOD;}for (int i=1 ; i <= n ;i++)a[i]=( a[i] + i ) % MOD;for (int i=1 ; i <n ; i++)printf ("%d ",a[i]);printf ("%d\n",a[n]);}return 0;}
0 0
- 【周练2016.3.5】序列的区间操作(对区间的操作,好题)
- 序列的区间操作(对区间的操作,好题)
- 序列的区间操作
- 问题 K: 序列的区间操作【区间加法】【思维】【数学】
- 问题 K: 序列的区间操作
- 【HPU】[1732]序列的区间操作
- Splay 的区间操作
- 【HPU OJ 1310 】序列的区间操作 【思维】
- 分桶法和平方分割(对区间的操作)
- BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)
- poj 3225 区间(区间的交并补操作)
- POJ3468 线段树的区间操作
- POJ3580 SuperMemo(Splay的区间操作)
- HDU 4578 线段树区间更新(确定区间操作的优先级)
- bzoj1858:序列操作 (线段树区间信息合并)
- coj 1123 带区间操作的线段树(lazy)
- POJ 3225(线段树,区间的交并补操作)
- 冒泡排序--对指定的区间序列排序
- linux下查找局域网内的ip
- 接口的使用
- Android系统自带样式(android:theme)
- 改变手机状态栏的颜色,隐藏手机状态栏
- 【转载】广告点击率的贝叶斯平滑
- 【周练2016.3.5】序列的区间操作(对区间的操作,好题)
- 【JAVA】29、面向对象的基本概念和三个特征
- TCP/IP基础(五)
- 业内大神浅谈MYSQL联合查询
- c++ 继承 多重继承 多态性 虚函数
- 获取一个按钮上的文字
- 实现一个同步的迭代型TCP服务器
- leetcode:Remove Duplicates from Sorted Array 【Java】
- Java BigInteger的简单使用