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
4 4 2 1
1 3
2 3
3 3
2 -1

Sample Output
TAK
TAK
NIE
TAK


这题好难,完全不懂原理……以下转载CRZbulabula的博客

Hall定理

把俱乐部的人看做点集X,溜冰鞋看做点集Y

显然这是一个二部图

根据Hall定理,如果存在饱和点集X的匹配,那么\(\forall S \subseteq X\),\(|N(S)| \geqslant |S|\)

N(S)是Y中与X相邻的点的集合

对于此题,Hall定理最容易取到反例的状况一定是连续一段区间

因为此时能用来容纳X匹配的对应的Y总不多于不连续的区间

那么就是说,\(\forall \sum\limits_{i=l}^r A_i \leqslant (r - l + 1 + d)\times k\)

两边同时-k,得\(\sum\limits_{i=1}^n (A_i-k) \leqslant d\times k\)

于是,我们只需要维护连续序列的最大值就行了

线段树解决

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())    x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10)     print(x/10);putchar(x%10+'0');
}
const int N=2e5;
int n,m,k,d;
struct Segment{#define ls (p<<1)#define rs (p<<1|1)struct node{ll le,ri,sum,now;node(){le=ri=now=sum=0;}node(ll a,ll b,ll c,ll d){le=a,ri=b,sum=c,now=d;}void insert(ll x){le=ri=now=sum=x;}}tree[(N<<2)+10];friend node operator +(const node &x,const int v){return node(x.le+v,x.ri+v,x.sum+v,x.now+v);}friend node operator +(const node &x,const node &y){node z;z.now=max(max(x.now,y.now),x.ri+y.le);z.le=max(x.le,x.sum+y.le);z.ri=max(y.ri,x.ri+y.sum);z.sum=x.sum+y.sum;return z;}void build(int p,int l,int r){if (l==r){tree[p].insert(-k);return;}int mid=(l+r)>>1;build(ls,l,mid),build(rs,mid+1,r);tree[p]=tree[ls]+tree[rs];}void change(int p,int l,int r,int x,ll v){if (l==r){tree[p]=tree[p]+v;return;}int mid=(l+r)>>1;if (x<=mid) change(ls,l,mid,x,v);else    change(rs,mid+1,r,x,v);tree[p]=tree[ls]+tree[rs];}
}Tree;
int main(){n=read(),m=read(),k=read(),d=read();Tree.build(1,1,n); for (int i=1;i<=m;i++){int x=read(),v=read();Tree.change(1,1,n,x,v);printf(Tree.tree[1].now>1ll*k*d?"NIE\n":"TAK\n");}return 0;
}

转载于:https://www.cnblogs.com/Wolfycz/p/9101994.html

[POI2009]Lyz相关推荐

  1. 1135: [POI2009]Lyz

    1135: [POI2009]Lyz Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 418  Solved: 191 [Submit][Status ...

  2. Hall定理(bzoj 1135: [POI2009]Lyz)

    Hall定理(二分图重要定理): 对于二分图U, V(|U|<|V|),设M(Ux)为V中可以与Ux中的点相连的点集,如果该二分图存在完美匹配 那么对于任意点集x∈U都有|M(x)|>=| ...

  3. [BZOJ 1135][POI2009]Lyz

    [BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...

  4. 【BZOJ1135】[POI2009]Lyz 线段树

    [BZOJ1135][POI2009]Lyz Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了x ...

  5. [BZOJ1135][P3488][POI2009]LYZ[线段树+Hall定理]

    首先从二分图匹配的角度来想这个题,只要每个人都能和一双鞋子匹配,那么溜冰鞋就是足够的. 但看范围不能用二分图匹配来做,因为边数会爆炸 Hall定理是判定二分图是否存在完全匹配的定理. 完全匹配:是指最 ...

  6. BZOJ1135: [POI2009]Lyz

    似乎是hall定理的经典模型 贪心的想,对于人的任意一个集合,肯定编号是连续的l~r一段更容易使匹配不合法 写成柿子就是∑ri=lsi>(d+r−l+1)k\sum_{i=l}^rsi>( ...

  7. BZOJ 1135 [POI2009]Lyz 线段树

    题意:链接 方法:线段树维护子区间最值. 解析: 我们可以推出来一个式子. 就是如果满足题意的话. 那么任意一个子区间[l,r] f[i]表示穿i的鞋的人数 (r−l+1+d)∗k>=∑f[i] ...

  8. 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 ...

  9. 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)

    题面戳我 Solution 二分图是显然的,用二分图匹配显然在这个范围会炸的很惨,我们考虑用霍尔定理. 我们任意选取穿\(l,r\)的号码鞋子的人,那么这些人可以穿的鞋子的范围是\(l,r+d\),这 ...

最新文章

  1. .net中存储过程的应用
  2. C语言的int, float,double相互转化 (从本质上理解可能的问题)
  3. 正则表达式的命名分组
  4. leetcode 103. 二叉树的锯齿形层次遍历
  5. Android提权root漏洞,【转】结合init源码剖析android root提权漏洞(CVE
  6. flash实用工具类+开源包收藏
  7. 织梦本地调试运行PHP不显示图片,织梦CMS手机端不显示图片的原因及解决方法!...
  8. paip.python NameError name 'xxx' is not defined\
  9. 目前最常用的计算机机箱类型为_2016年自考《计算机应用基础》精选习题四
  10. 微信活动报名源码php,fb1357 Thinkphp活动报名发布微信小程序源码 聚会活动报名小程序含说明...
  11. learn words by steps 8 英语单词
  12. 走近网球运动·与棒球相似的体育项目·第一堂棒球课
  13. Win10系统如何修改无线MAC地址的几种方法
  14. 邮件发送平台哪个好?大家究竟该如何选择?
  15. 算法39-快速求次幂运算
  16. word中图片变为灰度图像 黑白图像 黑白图片
  17. 检测网络是否稳定的计算机命令,电脑中常用的网络检测命令|电脑中检测网络是否存在故障的几条命令...
  18. [POI2005] SZA-Template
  19. TypeError: argument 1 has unexpected type 'NoneType'(解决办法)
  20. vue input手机号验证

热门文章

  1. 【钉钉-场景化能力包】会展入场
  2. python wheel是什么意思_python中wheel指的是什么
  3. 提高微信小程序的应用速度的常见方式有哪些? 小程序怎么实现下拉刷新? 简述微信小程序原理? 小程序的发布流程(开发流程)分析下微信小程序的优劣势?小程序授权登录流程? 小程序支付如何实现
  4. 系列微课|《Python程序设计(第3版)》第4章
  5. Python语法-1-变量、输出、List列表、tuple元组、条件判断和循环等重要基础知识
  6. 数据仓库-hive分区表
  7. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)
  8. 电脑文档误删除怎么恢复,恢复误删除电脑文档的方法
  9. Oracle异常自我总结
  10. 第六章 SQL命令 CREATE INDEX(一)