题目描述

筱玛是一个热爱线段树的好筱玛。
筱玛的爷爷马爷在游戏中被筱玛吊打了,于是他恼羞成怒,决定给筱玛出这样一道数据结构题:
给定一个长度为nn的数组AA,刚开始每一项的值均为00。
支持以下两种操作,操作共mm次:
1 l r1 l r:将Al∼ArAl∼Ar的每一项的值加上11。
2 l r2 l r:执行操作编号在[l,r][l,r]内的所有操作各一次,保证rr小于当前操作的编号。
mm次操作结束后,你要告诉马爷AA数组变成什么样子了。
由于答案可能会很大,你只需要输出数组AA中的每个数在模109+7109+7意义下的值。

输入描述:

第一行两个数n,mn,m,分别表示数组长度及操作次数。接下来mm行,每行三个数opt,l,ropt,l,r,表示一次操作。

输出描述:

输出一行共nn个数,表示mm次操作结束后,A1∼AnA1∼An的值。
示例1

输入

复制

4 3
1 1 3
2 1 1
1 1 3

输出

复制

3 3 3 0

备注:

对于100%的数据,1≤n≤105,1≤m≤1051≤n≤105,1≤m≤105。

题解: 先把所有操作都先存下来,然后倒序差分即可解决。

  其实用了两个差分,一个用在实际数值数组上,一个用在操作次数上(倒序)

  一.为什么要倒序。我们知道每一个操作的次数都是由后面的操作来决定的。

   我们知道最后一个操作的次数一定是一,以此类推我们就可以得到前面每一个操作的操作次数了

   下面给出代码+注释:

    

//#pragma comment(linker, "/STACK:1024000000,1024000000")
//#pragma GCC optimize(2)
//#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include<sstream>
#include<iterator>
#include<cstring>
#include<string>
#include<cstdio>
#include<cctype>
#include<vector>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<list>
#include<set>using namespace std;
typedef double dou;
typedef long long ll;
typedef pair<int, int> pii;#define pai acos(-1.0)
#define M 200005
#define inf 1e18
#define mod 1000000007
#define left k<<1
#define right k<<1|1
#define W(a) while(a)
#define ms(a,b) memset(a,b,sizeof(a))struct Data
{ll Opt, L, R;
}num[M];//操作

ll n, m, pos, pre;
ll ans[M], cnt[M];//ans为差分序列,cnt为操作次数void init()
{ms(cnt, 0);ms(ans, 0);pos = pre = 0;cnt[m] = 1;//我们知道最后一次操作的次数肯定为一次
}int main()
{ios::sync_with_stdio(false);cin >> n >> m;for (int i = 1; i <= m; i++){cin >> num[i].Opt >> num[i].L >> num[i].R;//保存好操作
    }init();for (int i = m; i >= 1; i--){pos += cnt[i];//差分得到操作次数pos = (pos + mod) % mod;if (num[i].Opt == 1){ans[num[i].L] += pos;ans[num[i].R + 1] -= pos;}else{cnt[num[i].R] += pos;cnt[num[i].L - 1] -= pos;}}for (int i = 1; i <= n; i++){pre += ans[i];cout << (pre + mod) % mod<<' ' ;}return 0;
}

转载于:https://www.cnblogs.com/caibingxu/p/11141365.html

思维题——倒序差分的运用相关推荐

  1. Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)

    心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...

  2. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  3. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  4. yoyo思维题(困难) 组合数学

    问题 B: yoyo思维题(困难) 时间限制: 1 Sec  内存限制: 256 MB 提交: 11  解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...

  5. 1884: 三个家庭(思维题)

    1884: 三个家庭 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 244 Solved: 81 [Submit][Status][Web Board] ...

  6. 思维题 UVA 10881 Piotr's Ants

    题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...

  7. CF--思维练习-- CodeForces - 215C - Crosses(思维题)

    ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...

  8. ACM思维题训练 Section A

    题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...

  9. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

最新文章

  1. suse linux用户界面,suse linux开户图形化界面
  2. linux透明加密系统,基于Linux的透明加密系统的设计与实现
  3. Estimathon
  4. jquery插件课程1 幻灯片、城市选择、日期时间选择、拖放、方向拖动插件
  5. CreateThread和_beginthreadex的区别
  6. 蓝牙扫描_无线扫描枪常见的传输模式及其区别
  7. mysql+installer+community+5.7.9_win10系统,mysql-installer-community-5.7.19.0.msi安装
  8. 关于跳转 + 传递消息,
  9. 了解SpringMVC框架及基本工作流程
  10. 配置JAVA的环境变量
  11. 虚拟仿真实验室管理系统
  12. Jquery 实现json复杂查询等操作(jsonDB)
  13. 类和对象的基础2——对象的生与死(构造函数和析构函数)
  14. 在VS2010下利用vue开发团队项目
  15. arnold如何设置鱼眼相机_【总结】如何看待默认渲染器、arnold阿诺德渲染器、Octane渲染器、Redshift等渲染器?...
  16. 房租客手机端个人中心html页面
  17. wordpress真正静态化插件really-static(纯静态html网页生成插件)
  18. TongWeb及应用系统安全加固
  19. [转载] K3漏油器全紫铜替换原硅胶垫教程。标准姿势
  20. Python——数据分层抽样

热门文章

  1. 开发常见错误解决(3)VS2005调试程序出错,绑定句柄无效 Terminal Services
  2. C语言 二进制文件读取和写入
  3. 施工企业项目管理的系统修炼_施工企业项目亏损的11个主观因素
  4. 怎么在windows安装python模块_如何在windows环境下安装python里的模块
  5. 【Gerrit】持续集成工具Jenkins的安装配置与使用过程中遇到的问题整理
  6. 通过反射获取类上的注解
  7. 解决nginx负载均衡高可用keepalived只针对物理机的问题
  8. 【转载】C++创建对象的两种方法
  9. Ajax--readyState一直为0
  10. redis做分布式锁可能不那么简单