[Luogu 4231] 三步必杀
时间:2020-08-08
本文章向大家介绍[Luogu 4231] 三步必杀,主要包括[Luogu 4231] 三步必杀使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
经某大佬的建议,蒟蒻去做了一下这道题,本人觉得这道题很有价值。
题意概括:
给定n个柱子,m次操作,每次操作会对l-r区间的损失度呈等差序列增加
(已给定对l增加的损失度s和对r增加的损失度e)求在m次操作后n根柱子损失度的异或和与最大值。
思路:
一开始想了很久的数据结构,
想过用树状数组,线段树等,
但后来发现什么数据结构都不用。。
因为是对一个区间加上等差数列,
所以我们想到了差分,
即对l+1-r区间加,
对l和r+1这两个点做单点加,
可以用树状数组或线段树来维护,
但还有一种更简单的解法,
我们可以对这个差分序列再进行一次差分,
这样一来就是进行四个单点加,
分别是对l,l+1,r+1,r+2进行修改,
最后再对差分序列的差分序列求前缀和,
得到的就是差分序列,
再对差分序列求一次前缀和,
得到的就是原数组。
最后记得要开long long!
<code>
// luogu-judger-enable-o2 #include<cstdio> #include<algorithm> using namespace std; #define int long long #define rep(i,n,m) for(i=n;i<=m;i++) int a[10000025],c[10000025]; int read(){ int w=0;char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') w=w*10+c-48,c=getchar(); return w; } #undef int long long int main(){ #define int long long int n,m,s,e,l,r,d,i,ans=0,maxn=0; n=read();m=read(); rep(i,1,m){ l=read();r=read();s=read();e=read(); d=(e-s)/(r-l); a[l]+=s;a[l+1]+=d-s; a[r+1]+=-e-d;a[r+2]+=e; } rep(i,1,n){ c[i]=c[i-1]+a[i]; a[i]=a[i-1]+c[i]; ans^=a[i];maxn=max(maxn,a[i]); } printf("%lld %lld",ans,maxn); return 0; }
原文地址:https://www.cnblogs.com/Fish-/p/8450160.html
- Android中如何提取和生成mp4文件
- 两张图片告诉你为什么域名会被解析到65.49.2.178
- 【有人@我】Android中高亮变色显示文本中的关键字
- 一个简单易用的 Android 导航栏TitleBar
- 分析一个跨平台DDOS僵尸网络
- Android快速开发框架 Ultimate
- Cisco Linksys路由器蠕虫The Moon正在蔓延
- 移动支付安全评测:微信支付篇
- 如何优化 Android Studio 启动、编译和运行速度?
- 微信小程序左右滑动切换图片酷炫效果(附效果)
- Facebook推出用于android数据加密的开源API
- Android 表单验证框架:AValidations
- 推荐系统介绍
- Android WebView 上传文件支持全解析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android应用禁止屏幕休眠的3种方法
- Flutter 实现下拉刷新上拉加载的示例代码
- [- C++趣玩篇1 -] 从打印开始说起
- Android实现蓝牙(BlueTooth)设备检测连接
- JQuery 入门学习(三)
- Android实现美团APP的底部滑动菜单
- 正则十八式-第二式:控鹤擒龙
- android实现手写签名功能
- [普及]程序自启动方式 - ActiveX
- Android WebView实现顶部进度条
- 通过一个简单的例子学习Angular Injection Token工作原理
- Android 自定义球型水波纹带圆弧进度效果(实例代码)
- Android自定义View实现弹幕效果
- 使用Injection Token将字符串类型的参数注入到类的构造函数里
- 联想Y480 ubuntu安装有线驱动