题意:

初始时滑冰俱乐部有1到n号的溜冰鞋各k双,x号脚的人可以穿x到x+d的溜冰鞋,;

有m次操作,每次包含两个数ri,xi,代表来了xi个ri号脚的人(xi可能为负);

对于每次操作,输出溜冰鞋是否足够;

n<=200000,m<=500000,k<=10^9;

题解:

首先这是一个二分图匹配问题,显然鞋和人是没有交集的;

然后就有一个Hall定理:

二部图G中的两部分顶点组成的集合分别为X, Y;

边集中有一组无公共点的边,一端恰好为组成X的所有点的充分必要条件是:
X中的任意k个点至少与Y中的k个点相邻;(1≤k≤m)

相邻指有边相连,在x中任选k个我们用任选一段区间代替;

所以在一段区间[l,r]中,令x号脚的人数为F(x);

有∑F(i)<=(r-l+d+1)*k  (l<=i<=r)成立;

将每个F(i)都减一个k,不等式可化为;

∑(F(i)-k)<=d*k  (l<=i<=r);

这个式子任选一段区间都成立;

那么只要求出最大区间和判断是否大于d*k就可以了;

线段树维护,复杂度O(mlogn);

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 210000
#define lson l,mid,no<<1
#define rson mid+1,r,no<<1|1
using namespace std;
typedef long long ll;
struct Seg
{ll L,R,ma,sum;Seg(){}Seg(ll x){L=R=ma=sum=x;}friend Seg operator +(Seg l,Seg r){Seg ret;ret.sum=l.sum+r.sum;ret.L=max(l.L,l.sum+r.L);ret.R=max(r.R,r.sum+l.R);ret.ma=max(l.R+r.L,max(l.ma,r.ma));return ret;}
}tr[N<<2];
void Pushup(ll no)
{tr[no]=tr[no<<1]+tr[no<<1|1];
}
void Build(ll l,ll r,ll no,ll k)
{if(l==r)tr[no]=Seg(-k);else{ll mid=l+r>>1;Build(lson,k);Build(rson,k);Pushup(no);}
}
void update(ll l,ll r,ll no,ll x,ll val)
{if(l==r)tr[no]=Seg(tr[no].sum+val);else{ll mid=l+r>>1;if(x<=mid)   update(lson,x,val);else     update(rson,x,val);Pushup(no);}
}
int main()
{ll n,m,d,i,j,k,x,r;scanf("%lld%lld%lld%lld",&n,&m,&k,&d);Build(1,n,1,k);for(i=1;i<=m;i++){scanf("%lld%lld",&r,&x);update(1,n,1,r,x);if(tr[1].ma>(ll)d*k)puts("NIE");elseputs("TAK");}return 0;
}

bzoj-1135 Lyz相关推荐

  1. [BZOJ 1135][POI2009]Lyz

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

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

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

  3. BZOJ 1135 [POI2009]Lyz 线段树

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

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

  5. BZOJ 1135: [POI2009]Lyz

    首先是二分图匹配 Hall定理 令a[i]表示尺码为i的人有多少个 然后是任何的l,r  a[i]之和<=(r-l+1+d)*k ->任何的l,r (a[i]-k)之和<=d*k(定 ...

  6. 【BZOJ】1135: [POI2009]Lyz

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

  7. 1135: [POI2009]Lyz

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

  8. 【BZOJ】【P1135】【POI2009】【Lyz】【题解】【线段树+Hall定理】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1135 把鞋子和人抽象成二分图 Hall定理: 此定理使用于组合问题中,二部图G中的两部分顶点 ...

  9. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  10. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

最新文章

  1. Linux环境编译qtmqtt,qtmqttclient
  2. C#泛型对类型参数的推断
  3. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
  4. 基于.NET Framework 4.0的解决方案部署
  5. 机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构
  6. 各种模板(数据结构图论)
  7. 一般向量空间的基变换_MIT—线性代数笔记30 线性变换及对应矩阵
  8. localhost方式提交作业到spark运行
  9. 【结构型】Bridge模式
  10. mysql+基本代码_PHP+MySQL扎实基本功十句话_php
  11. linux   find acm time
  12. Photoshop 入门教程,处理图层「2」了解图层基本知识
  13. 专家显身支招 教你如何选购高品质DDR2内存(例)
  14. 如何自动发送生日提醒和祝福
  15. imo云办公室与RTX竞品分析报告
  16. 日系插画学习笔记(三):光影与结构
  17. 租便宜的VPS应该注意什么?
  18. 程序员深思语,导师语录
  19. JAVA NIO实现客户端与服务端通信
  20. Hive练习-面试题

热门文章

  1. matlab读取视频VideoRead用法
  2. 【LaTex】6.4 listings高亮设置
  3. Python实现文件前添加序号
  4. 常见的短信群发平台,短信群发平台分类
  5. 微信app支付服务端开发记录
  6. OS学习笔记-11(清华大学慕课)进程与线程
  7. mybatis 不确定结果集集_集集丨与小直男的日常(三)
  8. 广东九联UNT402H-3798-mv300-uwe5621wifi-爱家TV新魔百和刷机固件
  9. android 扫描手机内存和SD卡,获取手机的视频、音频文件。把获取不到的文件扫描出来
  10. 2.Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features论文核心解读以及代码实现