传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1135

把鞋子和人抽象成二分图

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的最长连续子序列

Code:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2e5+5;
typedef long long LL;
struct seg{struct node{LL ls,rs,ss,sum;node(){ls=rs=ss=sum=0;}}t[maxn<<2];#define lson i<<1,l,mid#define rson i<<1|1,mid+1,r#define L i<<1#define R i<<1|1void Add(int i,int l,int r,int ps,LL d){if(l==r){t[i].ls+=d;t[i].rs+=d;t[i].ss+=d;t[i].sum+=d;return;}int mid=(l+r)>>1;if(ps<=mid)Add(lson,ps,d);else Add(rson,ps,d);t[i].ls=max(t[L].ls,t[L].sum+t[R].ls);t[i].rs=max(t[R].rs,t[R].sum+t[L].rs);t[i].ss=max(t[L].ss,t[R].ss);t[i].ss=max(t[i].ss,t[L].rs+t[R].ls);t[i].sum=t[L].sum+t[R].sum;}
}T;
int n,m,k,d;
int main(){scanf("%d%d%d%d",&n,&m,&k,&d);for(int i=1;i<=n;i++)T.Add(1,1,n,i,-k);while(m--){int x,r;scanf("%d%d",&r,&x);T.Add(1,1,n,r,x);puts(T.t[1].ss<=(LL)d*k?"TAK":"NIE");}return 0;
}

【BZOJ】【P1135】【POI2009】【Lyz】【题解】【线段树+Hall定理】相关推荐

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

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

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

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

  3. [BZOJ 1135][POI2009]Lyz

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

  4. BZOJ 1135 [POI2009]Lyz 线段树

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

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

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

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

  7. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2143 是 hydro 的 BZOJ ...

  8. BZOJ 1135: [POI2009]Lyz

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

  9. bzoj 3838: [Pa2013]Raper (线段树)

    3838: [Pa2013]Raper Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 53  Solved: 27 [Submit][Status] ...

最新文章

  1. 构建Java并发模型框架
  2. java.util.ServiceLoader源码分析
  3. vscode教程笔记
  4. 如何下载github项目中的某一部分
  5. 如何判断服务器之间的服务是否可用?ping 还是 telnet?
  6. JAVA教程 第六讲 Java的线程和Java Applet(二)
  7. JavaFX技巧3:使用回调接口
  8. 微信正则表达式 iOS
  9. 【BZOJ1934】【codevs2341】善意的投票,二分图最小割
  10. 人脸识别(3)---静态人脸识别和动态人脸识别的区别
  11. 如何快速实现FaceTime多人视频效果
  12. ISO14001是什么管理体系
  13. ms office word2013教程 - 文字处理之插入复合条饼图
  14. 最有效地戒掉晚睡强迫症(熬夜强迫症、假象失眠症等等)
  15. NVIDIA Jetson TK1学习与开发——手动刷机
  16. 如何用php农场项目,2020全新亲测php农场游戏源码-金币菇种植理财区块链源码 带商城系统...
  17. MySQL中定时任务的使用
  18. Python脚本抢购茅台,一键式傻瓜教程,不会python 也能用
  19. 全球及中国医用管材行业需求调研与竞争趋势研究报告2022版
  20. Android开发之旅:环境搭建及HelloWorld---吴秦(Tyler)

热门文章

  1. 每日一题-75(向公司CEO汇报工作的所有人)
  2. 放弃VMware改投VirtualBox的五个理由
  3. Quasi-globally Optimal and Near/True Real-time Vanishing Point Estimation in Manhattan World 论文阅读学习
  4. vue判断什么手机打开网页及是否用QQ浏览器或者微信浏览器打开
  5. linux系统下载18.04,在Ubuntu 18.04系统中下载安装Persepolis Download Manager
  6. KEIL编译程序电脑卡的问题
  7. android麦克风被禁用怎么办,为什么微信麦克风被禁用?如何开启?
  8. linux下静态库、动态库总结
  9. Python还原微信好友已撤回的微信消息
  10. 借助栈实现单链表的原地逆置