1135: [POI2009]Lyz
1135: [POI2009]Lyz
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 418 Solved: 191
[Submit][Status][Discuss]
Description
初始时滑冰俱乐部有1到n号的溜冰鞋各k双。已知x号脚的人可以穿x到x+d的溜冰鞋。 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人。xi为负,则代表走了这么多人。 对于每次操作,输出溜冰鞋是否足够。
Input
n m k d ( 1≤n≤200,000 , 1≤m≤500,000 , 1≤k≤10^9 , 0≤d≤n ) ri xi ( 1≤i≤m, 1≤ri≤n-d , |xi|≤10^9 )
Output
对于每个操作,输出一行,TAK表示够 NIE表示不够。
Sample Input
1 3
2 3
3 3
2 -1
Sample Output
TAK
NIE
TAK
HINT
Source
[Submit][Status][Discuss]
Hall定理,,,
把俱乐部的人看做点集X,溜冰鞋看做点集Y
显然这是一个二部图
根据Hall定理,如果存在饱和点集X的匹配,那么∀S ⊆ X,|N(S)| >= |S|
N(S)是Y中与X相邻的点的集合
对于此题,Hall定理最容易取到反例的状况一定是连续一段区间
因为此时能用来容纳X匹配的对应的Y总不多于不连续的区间
那么就是说,∀∑ai <= (r - l + 1 + d)*k, (i∈[l,r])
两边同时-k,得∑(ai-k) <= d*k
于是,我们只需要维护连续序列的最大值就行了
线段树解决
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn = 2E5 + 20;
const int T = 4;
typedef long long LL;int n,m;
LL k,d,c[maxn*T],ml[maxn*T],mr[maxn*T],ma[maxn*T];void maintain(int o)
{int lc = (o<<1),rc = (o<<1|1);c[o] = c[lc] + c[rc];ma[o] = max(ma[lc],ma[rc]);ma[o] = max(ma[o],mr[lc] + ml[rc]);ml[o] = max(ml[lc],c[lc] + ml[rc]);mr[o] = max(mr[rc],c[rc] + mr[lc]);
}void Build(int o,int l,int r)
{if (l == r) {c[o] = ma[o] = ml[o] = mr[o] = -k;return;}int mid = (l + r) >> 1;Build(o<<1,l,mid); Build(o<<1|1,mid+1,r);maintain(o);
}void Modify(int o,int l,int r,int pos,LL x)
{if (l == r) {c[o] += x; ma[o] += x;ml[o] += x; mr[o] += x;return;} int mid = (l + r) >> 1;if(pos <= mid) Modify(o<<1,l,mid,pos,x);else Modify(o<<1|1,mid+1,r,pos,x);maintain(o);
}int main()
{#ifdef DMCfreopen("DMC.txt","r",stdin);#endifcin >> n >> m >> k >> d;Build(1,1,n);while (m--) {int r,x; scanf("%d%d",&r,&x);Modify(1,1,n,r,x);if (ma[1] > k*d) puts("NIE");else puts("TAK");}return 0;
}
1135: [POI2009]Lyz相关推荐
- Hall定理(bzoj 1135: [POI2009]Lyz)
Hall定理(二分图重要定理): 对于二分图U, V(|U|<|V|),设M(Ux)为V中可以与Ux中的点相连的点集,如果该二分图存在完美匹配 那么对于任意点集x∈U都有|M(x)|>=| ...
- [BZOJ 1135][POI2009]Lyz
[BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...
- BZOJ 1135 [POI2009]Lyz 线段树
题意:链接 方法:线段树维护子区间最值. 解析: 我们可以推出来一个式子. 就是如果满足题意的话. 那么任意一个子区间[l,r] f[i]表示穿i的鞋的人数 (r−l+1+d)∗k>=∑f[i] ...
- BZOJ[1135][POI2009]Lyz 线段树
传送门ber~ 如果某时不合法,那一定存在某段满足 (r−l+1+d)∗k<Σl≤i≤rnumi(r−l+1+d)∗k<Σl≤i≤rnumi (r-l+1+d)*k (其中 numinum ...
- BZOJ 1135: [POI2009]Lyz
首先是二分图匹配 Hall定理 令a[i]表示尺码为i的人有多少个 然后是任何的l,r a[i]之和<=(r-l+1+d)*k ->任何的l,r (a[i]-k)之和<=d*k(定 ...
- 【BZOJ】1135: [POI2009]Lyz
题意 有\(1\)到\(n(1 \le n \le 200000)\)号的溜冰鞋各\(k(1 \le k \le 10^9)\)双.已知\(x\)号脚的人可以穿\(x\)到\(x+d\)的溜冰鞋. 有 ...
- 【BZOJ1135】[POI2009]Lyz 线段树
[BZOJ1135][POI2009]Lyz Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了x ...
- [BZOJ1135][P3488][POI2009]LYZ[线段树+Hall定理]
首先从二分图匹配的角度来想这个题,只要每个人都能和一双鞋子匹配,那么溜冰鞋就是足够的. 但看范围不能用二分图匹配来做,因为边数会爆炸 Hall定理是判定二分图是否存在完全匹配的定理. 完全匹配:是指最 ...
- BZOJ1135: [POI2009]Lyz
似乎是hall定理的经典模型 贪心的想,对于人的任意一个集合,肯定编号是连续的l~r一段更容易使匹配不合法 写成柿子就是∑ri=lsi>(d+r−l+1)k\sum_{i=l}^rsi>( ...
最新文章
- android文件的读取方法,Android读取写入文件的方法
- 大道至简第三章读后感
- vscode怎么写qt项目_使用VSCode 编译调试QT程序
- 禅道 bug状态 open_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...
- 【你会用代码画年兽吗】20行代码使用JS实现虎年春节倒计时 —— 红红火火过虎年
- python里面的import provide_Python importorror:没有名为wmi的模块
- 必看企业级Redis锁资产巡检扫描业务场景实现(加锁限制扫描次数)
- Mr.J--JS学习(继承模式发展史)
- 解决win-server 2008R2 安装 Materials 出现 Windows Install Coordinator “应用程序正在为首次安装做准备”...
- javascript给类添加的方法
- 使用MVPArms框架时,访问网络没响应。
- MASM5.0下载安装与运行第一个HelloWorld
- 基于Ricequant时间序列模型预测股价
- 读《史蒂夫•乔布斯传》(七)
- 四川大学计算机学院男女生比例,2019年四川各大高校男女比例排行,电子科技大学4比1...
- 生信文献 | Sirt6通过介导PI3K/Akt信号通路促进弥漫性大B细胞淋巴瘤的肿瘤发生和耐药性...
- Ae 入门系列之九:运动跟踪和稳定(下)
- 微信小程序的wxml实现复杂运算或者数据处理
- Java、JSP就业信息管理系统的设计与实现
- linux系统安装mysql详细教程