BZOJ 1135 P3488 LYZ-Ice Skates 线段树+Hall
2024-09-05 04:47:26
https://www.luogu.org/problem/P3488
根据Hall定理 左边任意一个区间L-R a[i]的和sum[l~r] 都要<= (R-L+1+d)*K
把(R-L+1)*K 挪到左边 即为 对任意L-R区间 有 $\sum_{i=L}^R{(a[i]-k)} \le K*D$
然后用线段树最大字段和去维护它即可
#include<bits/stdc++.h>
#define RG register
using namespace std;
typedef long long ll;
const int MAXN = ;
struct segment_tree {
ll lmax, rmax, ans, sum;
} sgt[MAXN << ];
int n, m;
ll k, d;
inline void pushup(int x) {
sgt[x].sum = sgt[x << ].sum + sgt[x << | ].sum;
sgt[x].lmax = max(sgt[x << ].lmax, sgt[x << ].sum + sgt[x << | ].lmax);
sgt[x].rmax = max(sgt[x << | ].rmax, sgt[x << ].rmax + sgt[x << | ].sum);
sgt[x].ans = max(sgt[x << ].ans, max(sgt[x << | ].ans, sgt[x << ].rmax + sgt[x << | ].lmax));
}
void build(int x, int l, int r) {
if (l == r) {
sgt[x].lmax = sgt[x].rmax = ;
sgt[x].sum = sgt[x].ans = -k;
return ;
}
int mid = (l + r) >> ;
build(x << , l, mid);
build(x << | , mid + , r);
pushup(x);
}
void update(int x, int l, int r, int aim, ll add) {
if (l == r) {
sgt[x].sum += add, sgt[x].ans += add;
sgt[x].lmax = sgt[x].rmax = max(sgt[x].sum, 0LL);
return ;
}
int mid = (l + r) >> ;
if (aim <= mid) {
update(x << , l, mid, aim, add);
} else {
update(x << | , mid + , r, aim, add);
}
pushup(x);
}
int main() {
ll x, y;
scanf("%d %d %lld %lld", &n, &m, &k, &d);
build(, , n);
for (int i = ; i <= m; i++) {
scanf("%lld %lld", &x, &y);
update(, , n, x, y);
if (sgt[].ans <= 1LL * k * d) {
printf("TAK\n");
} else {
printf("NIE\n");
}
}
return ;
}
最新文章
- 常用SQL
- Typescript中的class interface 只是在声明,其实什么也没有干!
- 开发时建议关闭chrome的缓存[Disable cache(while DevTools open)]
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 &#39;sa&#39; 登录失败。
- linux下怎么查看ssh的用户登录日志
- js实现打开网页自动弹出添加QQ好友邀请窗口
- CSS :first-child 伪类
- SharePoint 2013中Office Web Apps的一次排错
- 封装自己的ajax函数
- SpringMVC使用静态资源
- Android EditText属性
- 射频识别技术漫谈(19)——Desfire的3次握手认证和段密码生成
- Oracle 动态查询,EXECUTE IMMEDIATE select into使用方法
- Top 10 Books For Advanced Level Java Developers
- Ubuntu Intel显卡驱动安装 (Ubuntu 14.04--Ubuntu 16.10 + Intel&#174; Graphics Update Tool)
- 根据iOS 10 的新特性,创建iMessage App,可用于自定义表情
- Linux工具安装和常用配置
- BZOJ5203 [NEERC2017 Northern] Grand Test 【dfs树】【构造】
- mybatis-generator没有自动生成代码和Junit测试controller
- Atitit gui界面ui技术发展史与未来趋势
热门文章
- Kali中安装 Shodan
- 【FFMPEG】【ARM-Linux开发】 ffmpeg 静态库使用,undefined reference错误
- eNSP——利用单臂路由实现VLAN间路由
- fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC sha
- (二十二)自定义简化版JDBC(Dbutils框架的设计思想)
- Photon Server LoadBalancing搭建
- python学习-7 条件语句 while循环 + 练习题
- docker 入门1 - 方向 【翻译】
- 安装 node.js npm,cnpm
- Java面试题之Java虚拟机垃圾回收