1135: [POI2009]Lyz

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 264  Solved: 106
[Submit][Status]

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

HINT

 

Source

题解:

暴力的话是每次构图跑个最大匹配,显然会T。

然后因为只需要判断能否把人全部匹配完了,所以我们有二分图匹配中的hall定理:

Hall定理:
此定理使用于组合问题中,二部图G中的两部分顶点组成的集合分别为X, Y, X={X1, X2, X3,X4,.........,Xm}, Y={y1, y2, y3, y4 ,.........,yn},G中有一组无公共点的边,一端恰好为组成X的点的充分必要条件是:
X中的任意k个点至少与Y中的k个点相邻。(1≤k≤m)
 
那么有解的条件就是任意一个人的集合的人数<=所连接的鞋子数量
可以看出,当人是连续的时候鞋子所连接数量最少,所以我们只需要判断连续的子序列是否满足题意即可。否则既然连续的都满足题意,那么分开之后一定会有更多的鞋子被连进来。

用  表示鞋号为i的人的个数

那么

维护t'i的最长连续子序列  ---zky

代码:

 #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 250000
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
struct seg{ll l,r,lx,rx,mx,sum;}t[*maxn];
ll n,m,kk,d;
inline void build(int k,int l,int r)
{
t[k].l=l;t[k].r=r;int mid=(l+r)>>;
t[k].lx=t[k].rx=t[k].mx=-kk;t[k].sum=-(r-l+)*kk;
if(l==r)return;
build(k<<,l,mid);build(k<<|,mid+,r);
}
inline void pushup(int k)
{
int l=k<<,r=k<<|;
t[k].lx=max(t[l].lx,t[l].sum+t[r].lx);
t[k].rx=max(t[r].rx,t[r].sum+t[l].rx);
t[k].mx=max(t[l].rx+t[r].lx,max(t[l].mx,t[r].mx));
t[k].sum=t[l].sum+t[r].sum;
}
inline void add(int k,int x,ll y)
{
int l=t[k].l,r=t[k].r,mid=(l+r)>>;
if(l==r){t[k].sum+=y;t[k].mx=t[k].lx=t[k].rx=t[k].sum;return;}
if(x<=mid)add(k<<,x,y);else add(k<<|,x,y);
pushup(k);
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();kk=read();d=read();
build(,,n);
while(m--)
{
int x=read();ll y=read();
add(,x,y);
printf("%s\n",t[].mx<=d*kk?"TAK":"NIE");
}
return ;
}

BZOJ1135: [POI2009]Lyz的更多相关文章

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

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

  2. [BZOJ1135][POI2009]Lyz[霍尔定理+线段树]

    题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的 ...

  3. BZOJ1135:[POI2009]Lyz(线段树,Hall定理)

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

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

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

  5. [BZOJ 1135][POI2009]Lyz

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

  6. 1135: [POI2009]Lyz

    1135: [POI2009]Lyz https://lydsy.com/JudgeOnline/problem.php?id=1135 分析: hall定理+线段树连续区间的最大的和. 首先转化为二 ...

  7. bzoj 1135 [POI2009]Lyz 线段树+hall定理

    1135: [POI2009]Lyz Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 573  Solved: 280[Submit][Status][ ...

  8. 【BZOJ1135】[POI2009]Lyz

    题解: hall定理..第一次听说 思考了半小时无果 二分图匹配时间显然太大 但是有这个hall定理 二分图有完美匹配的充要条件是 对于左边任意一个集合(大小为|s|),其连边点构成的集合(大小为|s ...

  9. 【BZOJ】1135: [POI2009]Lyz

    题意 有\(1\)到\(n(1 \le n \le 200000)\)号的溜冰鞋各\(k(1 \le k \le 10^9)\)双.已知\(x\)号脚的人可以穿\(x\)到\(x+d\)的溜冰鞋. 有 ...

随机推荐

  1. (转)javascript中的this

    JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一. 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不 ...

  2. Android - 获取字符串长度的宽度

    Paint paint = new Paint(); float strWidth = paint.measureText(String);

  3. CoreAnimation3-专用图层

    CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类.你指定诸如颜色和线宽等属性,用CGPath来定义想要绘制的图形,最后CAShapeLayer就自 ...

  4. jquery 左侧展开栏目

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 配置并学习微信JS-SDK(1)

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 微信JS-SDK ...

  6. Java反射结合JDBC写的一个通用DAO

    以前写反射只是用在了与设计模式的结合上,并没有考虑到反射可以与DAO结合.也是一个偶然的机会,被正在上培训的老师点到这个问题,才考虑到这个可能性,于是上网参考各种代码,然后自己动手开发了一个通用DAO ...

  7. [转载]为什么使用%lf读取double型的值,而用%f进行显示?

    博客地址:http://blog.csdn.net/shenzhou111/article/details/7826444 今天看到一篇好文章,mark一下. 出去旅游了一下,所以有些天没敲代码,于是 ...

  8. Memento:客户端瘦身

    说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中.其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展. ...

  9. Socket 错误总结

    错误 因为并没有搞清楚accept函数的使用,所以导致不停的发送失败,同时还不知道错误在哪里,无意中看见errno这个库,可以记录错误的原因,才知道原因在于没有用客户端的套接字进行接收数据,而这个客户 ...

  10. 安装linux系统后要做的事情

    基本安装0 http://www.kali.org.cn/thread-20517-1-1.html 基本安装1 http://defcon.cn/1618.html 基本安装2 http://www ...