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

Solution

这还是第一次听说$Hall$定理……

$Hall$定理:设一个二分图左边有$n$个点,右边有$m$个点,则左边$n$个点能完全匹配的充要条件是:对于$1<=i<=n$,左面任意$i$个点,都至少有$i$个右面的点与它相连。

那么考虑把鞋码相同的人放到一起,设鞋码为$i$的有$a[i]$个人。

贪心的想这个题,肯定是选二分图左边一段连续区间才更容易匹配无解。

所以由$Hall$定理得,不合法的话是存在一组$l,r$,满足

$\sum_{i=l}^{r} a[i]>(r-l+1+d)*k$。

把右边的$(r-l+1)*k$移到左边,并且设$c[i]=a[i]-k$,则有

$\sum_{i=l}^{r} c[i]>d*k$。

由于$d*k$是定值,所以我们只需要用一个维护最大子段和的线段树就可以判断是否合法了。

Code

 #include<iostream>
#include<cstdio>
#define N (200009)
#define LL long long
using namespace std; struct Sgt{LL lmax,rmax,max,val;}Segt[N<<];
LL n,m,k,d,r,x,a[N]; void Pushup(LL now)
{
LL ls=now<<,rs=now<<|;
Segt[now].val=Segt[ls].val+Segt[rs].val;
Segt[now].lmax=max(Segt[ls].lmax,Segt[ls].val+Segt[rs].lmax);
Segt[now].rmax=max(Segt[rs].rmax,Segt[rs].val+Segt[ls].rmax);
Segt[now].max=max(max(Segt[ls].max,Segt[rs].max),Segt[ls].rmax+Segt[rs].lmax);
} void Update(LL now,LL l,LL r,LL x,LL v)
{
if (l==r)
{
Segt[now].val+=v; Segt[now].max+=v;
Segt[now].lmax+=v; Segt[now].rmax+=v;
return;
}
LL mid=(l+r)>>;
if (x<=mid) Update(now<<,l,mid,x,v);
else Update(now<<|,mid+,r,x,v);
Pushup(now);
} int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&k,&d);;
for (int i=; i<=n; ++i) Update(,,n,i,-k);
for (int i=; i<=m; ++i)
{
scanf("%lld%lld",&r,&x);
Update(,,n,r,x);
puts(Segt[].max>k*d?"NIE":"TAK");
}
}

BZOJ1135:[POI2009]Lyz(线段树,Hall定理)的更多相关文章

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

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

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

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

  3. 【BZOJ2138】stone(线段树+hall定理)

    传送门 题意: 现在有\(n\)堆石子,每堆石子有\(a_i\)个. 之后会有\(m\)次,每次选择\([l,r]\)的石子堆中的石子扔\(k\)个,若不足,则尽量扔. 现在输出\(1\)~\(m\) ...

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

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

  5. BZOJ1135: [POI2009]Lyz

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

  6. BZOJ 1135 P3488 LYZ-Ice Skates 线段树+Hall

    https://www.luogu.org/problem/P3488 根据Hall定理 左边任意一个区间L-R a[i]的和sum[l~r] 都要<= (R-L+1+d)*K 把(R-L+1) ...

  7. 【题解】 bzoj3693: 圆桌会议 (线段树+霍尔定理)

    bzoj3693 Solution: 显然我们可以把人和位置抽象成点,就成了一个二分图,然后就可以用霍尔定理判断是否能有解 一开始我随便YY了一个\(check\)的方法:就是每次向后一组,我们就把那 ...

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

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

  9. [bzoj1135][Ceoi2011]Match_线段树

    [Ceoi2011]Match 题目大意:初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负, ...

随机推荐

  1. MySQL填坑系列--Linux平台下MySQL区分大小写问题

    大家好,我是软件大盗(道),下面开始我们的<MySQL填坑系列>. 笔者最近又在MySQL的边缘试探,然后,试探着,试探着就报错了. 书接上文,系统连接数据库时报错:找不到DB_TIMIN ...

  2. IDEA 现有项目连接SVN

    前言:有时会先搭建好系统,准备好所有配置文件及公共类,然后才会从IDEA中将代码放到SVN中,这里正好讲述了如何从现有代码连接到SVN. 首先将该项目启动SVN管理 然后关联对应SVN地址 右键项目名 ...

  3. STL:vector<bool> 和bitset

    今天某个地方要用到很多位标记于是想着可以用下bitset,不过发现居然是编译时确定空间的,不能动态分配.那就只能用vector来代替一下了,不过发现居然有vector<bool>这个特化模 ...

  4. 算警示吧——此文来自张鑫旭(说说CSS学习中的瓶颈)

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2523 虽已数年,但未 ...

  5. CSS样式之a标签(原文网址http://www.divcss5.com/shili/s57.shtml)

    这是个人在做网站的时候整理的关于a标签的使用方法,整理一下,方便下次使用. 一.a超链接的代码 <a href="http://www.baidu.com" target=& ...

  6. How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras

    Hyperparameter optimization is a big part of deep learning. The reason is that neural networks are n ...

  7. 润乾V4的最小化部署方式

     在接触到的很多项目实际应用中,部署润乾V4都是使用润乾V4设计器自带的WEB发布向导,直接生成webRoot目录,然后将该目录下的所有文件COPY到项目目录下,然后修改web.xml文件和rep ...

  8. Pig distinct用法举例

    dst = distinct data:   DISTINCT只能对整个记录(整行)去重,不能在字段级别去重.   触发reduce阶段   data = load 'data'; distinct ...

  9. 带你从零学ReactNative开发跨平台App开发[react native SqlLite 终极运用](十二)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  10. Django 请求参数

    Django 请求参数 1.获取URL路径中的参数 需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2.应该怎么操作呢? (1)未命名参数(位置参数) # 在项目下的urls.py ...