思维题——倒序差分的运用
题目描述
输入描述:
第一行两个数n,mn,m,分别表示数组长度及操作次数。接下来mm行,每行三个数opt,l,ropt,l,r,表示一次操作。
输出描述:
输出一行共nn个数,表示mm次操作结束后,A1∼AnA1∼An的值。
输入
复制
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
思维题——倒序差分的运用相关推荐
- Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)
心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...
- little w and Soda(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- yoyo思维题(困难) 组合数学
问题 B: yoyo思维题(困难) 时间限制: 1 Sec 内存限制: 256 MB 提交: 11 解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...
- 1884: 三个家庭(思维题)
1884: 三个家庭 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 244 Solved: 81 [Submit][Status][Web Board] ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...
- CF--思维练习-- CodeForces - 215C - Crosses(思维题)
ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
最新文章
- suse linux用户界面,suse linux开户图形化界面
- linux透明加密系统,基于Linux的透明加密系统的设计与实现
- Estimathon
- jquery插件课程1 幻灯片、城市选择、日期时间选择、拖放、方向拖动插件
- CreateThread和_beginthreadex的区别
- 蓝牙扫描_无线扫描枪常见的传输模式及其区别
- mysql+installer+community+5.7.9_win10系统,mysql-installer-community-5.7.19.0.msi安装
- 关于跳转 + 传递消息,
- 了解SpringMVC框架及基本工作流程
- 配置JAVA的环境变量
- 虚拟仿真实验室管理系统
- Jquery 实现json复杂查询等操作(jsonDB)
- 类和对象的基础2——对象的生与死(构造函数和析构函数)
- 在VS2010下利用vue开发团队项目
- arnold如何设置鱼眼相机_【总结】如何看待默认渲染器、arnold阿诺德渲染器、Octane渲染器、Redshift等渲染器?...
- 房租客手机端个人中心html页面
- wordpress真正静态化插件really-static(纯静态html网页生成插件)
- TongWeb及应用系统安全加固
- [转载] K3漏油器全紫铜替换原硅胶垫教程。标准姿势
- Python——数据分层抽样
热门文章
- 开发常见错误解决(3)VS2005调试程序出错,绑定句柄无效 Terminal Services
- C语言 二进制文件读取和写入
- 施工企业项目管理的系统修炼_施工企业项目亏损的11个主观因素
- 怎么在windows安装python模块_如何在windows环境下安装python里的模块
- 【Gerrit】持续集成工具Jenkins的安装配置与使用过程中遇到的问题整理
- 通过反射获取类上的注解
- 解决nginx负载均衡高可用keepalived只针对物理机的问题
- 【转载】C++创建对象的两种方法
- Ajax--readyState一直为0
- redis做分布式锁可能不那么简单