【BZOJ】1135: [POI2009]Lyz
题意
有\(1\)到\(n(1 \le n \le 200000)\)号的溜冰鞋各\(k(1 \le k \le 10^9)\)双。已知\(x\)号脚的人可以穿\(x\)到\(x+d\)的溜冰鞋。
有\(m(1 \le m \le 500000)\)次操作,每次来了\(x_i\)个\(r_i\)号脚的人。\(x_i\)为负,则代表走了这么多人。对于每次操作,输出溜冰鞋是否足够。
分析
容易发现是二分图模型,然而数据太大。
题解
根据Hall定理:如果存在\(X\)的完备匹配,则\(X\)中任意\(k\)个点都至少与\(Y\)中的\(k\)个点相邻。
所以我们只需要在任意一些人使得满足这个条件那么就行了。
然后来了个神结论:
假设\(a_i\)是\(i\)号鞋的人,则只要任意的\([l, r]\)满足\(\sum_{i=l}^{r} a_i \ge (r-l+1+d) * k\),即\(\sum_{i=l}^{r} (a_i-k) \ge d * k\)则可行。
并不知道这个结论怎么来的...
所以用线段树维护一下最大子序列的值即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int getint() {
int x=0, f=1, c=getchar();
for(; c<48||c>57; f=c=='-'?-1:f, c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x*f;
}
struct T {
ll mx, mxl, mxr, s;
void init() {
mx=mxl=mxr=s;
}
}t[1000005];
int n, m, k, d;
void up(int x) {
int l=x<<1, r=x<<1|1;
t[x].s=t[l].s+t[r].s;
t[x].mxl=max(t[l].mxl, t[l].s+t[r].mxl);
t[x].mxr=max(t[r].mxr, t[r].s+t[l].mxr);
t[x].mx=max(t[l].mxr+t[r].mxl, max(t[l].mx, t[r].mx));
}
void upd(int p, int g, int l=1, int r=n, int x=1) {
if(l==r) {
t[x].s+=g;
t[x].init();
return;
}
int mid=(l+r)>>1;
if(p<=mid) {
upd(p, g, l, mid, x<<1);
}
else {
upd(p, g, mid+1, r, x<<1|1);
}
up(x);
}
int main() {
n=getint(), m=getint(), k=getint(), d=getint();
for(int i=1; i<=n; ++i) {
upd(i, -k);
}
for(ll te=(ll)d*k; m; --m) {
int r=getint(), x=getint();
upd(r, x);
puts(t[1].mx<=te?"TAK":"NIE");
}
return 0;
}
【BZOJ】1135: [POI2009]Lyz的更多相关文章
- 【BZOJ】1119: [POI2009]SLO
题意 长度为\(n(1 \le n \le 1000000)\)的账单,\(+\)表示存1,\(-\)表示取1,任意时刻存款不会为负.初始有\(p\),最终有\(q\).每一次可以耗时\(x\)将某位 ...
- 【BZOJ】1115: [POI2009]石子游戏Kam
http://www.lydsy.com/JudgeOnline/problem.php?id=1115 题意:n堆石子,个数是从左到右单增.每一次可以从任意堆取出任意石子,但要保持单增这个性质.问先 ...
- 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)
题面戳我 Solution 二分图是显然的,用二分图匹配显然在这个范围会炸的很惨,我们考虑用霍尔定理. 我们任意选取穿\(l,r\)的号码鞋子的人,那么这些人可以穿的鞋子的范围是\(l,r+d\),这 ...
- [BZOJ 1135][POI2009]Lyz
[BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...
- bzoj 1135 [POI2009]Lyz 线段树+hall定理
1135: [POI2009]Lyz Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 573 Solved: 280[Submit][Status][ ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
随机推荐
- SQLServer基本查询
条件查询 --1.比较运算符 --2.确定集合谓词 --3.确定范围谓词 , ) --4.字符匹配谓词 select * from dbo.DepartMent where dName like 'C ...
- 【JAVA IO流之字节流】
字节流部分和字符流部分的体系架构很相似,有四个基本流:InputStream.OutputStream.BufferedInputStream.BufferedOutputStream,其中,Inpu ...
- myeclipse+tomcat 工程名改名的问题 ——————完美解决方案
当建好的工程再重命名之后,发布和访问的时候都还是原来的名字,这个问题纠结了我很久,最好找到解决方法,这里分享一下,希望大家不要再受这种困惑.解决方法: 点击工程右键->properties-&g ...
- 配置ogg异构oracle-mysql(1)基础环境配置
一.环境描述: 192.168.0.164 ( Oracle ) —> 192.168.0.165 (Mysql ) 版本: 操作系统:redhat5.8 Oracle: 11.2.0.3 M ...
- iOS和Android的app界面设计规范(转)
记录一下iOS和Andoird的界面设计规范,方便进行标准的产品设计,并与设计师顺畅沟通 iOS篇 界面尺寸 设备 分辨率 状态栏高度 导航栏高度 标签栏高度 iPhone6 plus 1242×22 ...
- Ubuntu 安装OpenCV3.0.0
Ubuntu安装OpenCV3.0.0 为了看看opencv3.0的HDR效果,尝试安装opencv3.0到ubuntu12.04上面,安装了好几次终于成功了. 参考博客: http://www.sa ...
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...
- 使用 json_in_java
// */ // ]]> java_in_json Table of Contents 1. Java 使用 Json 1.1. 下载地址: 1.2. 构造 json 字符串 1.3. 解析 j ...
- hdfs 名称节点和数据节点
名字节点(NameNode )是HDFS主从结构中主节点上运行的主要进程,它指导主从结构中的从节点,数据节点(DataNode)执行底层的I/O任务. 名字节点是HDFS的书记员,维护着整个文件系统的 ...
- AngularJS学习之SQL
1.使用PHP从MySQL中读取数据: <div ng-app="myApp" ng-controller="customersCtrl" > &l ...