霍尔定理 + 线段树?

咱学学霍尔定理...

霍尔定理和二分图完美匹配有关,具体而言,就是定义了二分图存在完美匹配的充要条件:

不妨设当前二分图左端集合为 X ,右端集合为 Y ,X 与 Y 之间的边集为 E

令 \(\omega(x)\) 表示在 Y 中能通过 E 与 x 中元素相连的元素数量,那么

$\forall x\in X, |x| \le |\omega(x)| $ 为 X 与 Y 存在完美匹配的充要条件...

然后咱发现,多加上 t 个人的话,也就是必然会让 \(|\omega(x)|\) 增加 t

那么咱就知道了,t 需要满足以下条件:

\[\forall x\in X, |x| \le |\omega(x)|+t
\]

\[\rightarrow t \ge |x| - |\omega(x)|
\]

\[\rightarrow t \ge |x| +min_R - max_L -1 - m
\]

\(min_R\) 和 \(max_L\) 表示 x 集合中所有人的最小的 R 和最大的 L

这样咱用线段树搞扫描线就行辣

//by Judge
#include<bits/stdc++.h>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const int M=2e5+3;
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int read(){ int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} int n,m,ans,t[M<<2],Tag[M<<2]; vector<int> val[M];
#define ls k<<1
#define rs k<<1|1
#define mid ((l+r)>>1)
#define lson ls,l,mid
#define rson rs,mid+1,r
inline int Max(int x,int y){ return x>y?x:y; }
inline void pushup(int k){ t[k]=Max(t[ls],t[rs]); }
inline void pushdown(int k){ if(!Tag[k]) return ;
Tag[ls]+=Tag[k],Tag[rs]+=Tag[k];
t[ls]+=Tag[k],t[rs]+=Tag[k],Tag[k]=0;
}
void build(int k,int l,int r){
if(l==r) return t[k]=l,void();
build(lson),build(rson),pushup(k);
}
void update(int k,int l,int r,int L,int R){
if(L<=l&&r<=R) return ++Tag[k],++t[k],void(); if(l>R||L>r) return ;
pushdown(k),update(lson,L,R),update(rson,L,R),pushup(k);
}
int query(int k,int l,int r,int L,int R){
if(L<=l&&r<=R) return t[k]; if(l>R||L>r) return 0;
return pushdown(k),Max(query(lson,L,R),query(rson,L,R));
}
int main(){ int l,r; n=read(),m=read()+1,ans=n-m+1;
fp(i,1,n) l=read(),r=read(),val[l].push_back(r);
build(1,0,m);
fp(L,0,m-1){
fp(j,0,val[L].size()-1) update(1,0,m,0,val[L][j]);
ans=Max(ans,query(1,0,m,L+1,m)-m-L);
} return !printf("%d\n",ans);
}

[AtCoder ARC076] F Exhausted?的更多相关文章

  1. ARC076 F Exhausted? Hall定理 + 线段树扫描线

    ---题面--- 题目大意: 有n个人,m个座位,每个人可以匹配的座位是[1, li] || [ri, m],可能有人不需要匹配座位(默认满足),问最少有多少人不能被满足. 题解: 首先可以看出这是一 ...

  2. arc076 F - Exhausted? (霍尔定理学习)

    题目链接 Problem Statement There are M chairs arranged in a line. The coordinate of the i-th chair ($$$1 ...

  3. 2017国家集训队作业[arc076d/f][Exhausted?]

    2017国家集训队作业[arc076d/f][Exhausted?] 题意: ​ 有\(N\)个人,\(M\)把椅子,给出\(...L_i.R_i\)表示第\(i\)个人可以选择编号为\(1\sim ...

  4. Atcoder abc187 F Close Group(动态规划)

    Atcoder abc187 F Close Group 题目 给出一张n个点,m条边的无向图,问删除任意数量的边后,留下来的最少数量的团的个数(\(n \le 18\) ) 题解 核心:枚举状态+动 ...

  5. 【AtCoder ARC076】F Exhausted? 霍尔定理+线段树

    题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max( ...

  6. AtCoder Regular Contest 076 F - Exhausted?

    题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...

  7. AtCoder F - Exhausted?

    传送门 sxy题解: //Achen #include<algorithm> #include<iostream> #include<cstring> #inclu ...

  8. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  9. 【ATcoder s8pc_3 F】 寿司

    http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f (题目链接) 题意 有一个长度为$N$的数列$A$,初始为$0$.$Q$次操作,每次两个参数$x,y$. ...

随机推荐

  1. 【C】题解 (五校联考3day2)

    分析 这道题看上去很恶心,实际上只用记录四坨东西就能打DP了:y坐标最小的向上射的点.y坐标最大的向下射的点.y坐标最大和最小的向右射的点,转移显然.注意,如果该状态的值为零就可以略过,否则会超时. ...

  2. LeetCode 1143 最长公共子序列

    链接:https://leetcode-cn.com/problems/longest-common-subsequence 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序 ...

  3. A1011

    找最大的,然后按规定计算后输出. 没啥可说的,除非犯了愚蠢的错误(比如把j写成i这种),按题目要求写就是了. #include<cstdio> int main(){ ]={'W','T' ...

  4. jq 获取各个元素的宽度高度的方法

    JS获取各种宽度.高度的简单介绍: scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获 ...

  5. JavaScript赋值运算符和关系运算符

    赋值运算符:用以给变量进行赋值 最常见的赋值运算符就是等号(=),将右侧的值赋给左侧的变量(表达式x=y表示将y赋值给x) x += y // 等同于 x = x + y 还有其他更多的复合赋值运算 ...

  6. Leetcode 7. Reverse Integer(水)

    7. Reverse Integer Easy Given a 32-bit signed integer, reverse digits of an integer. Example 1: Inpu ...

  7. jquery ajax实现文件上传

    test5.html <html> <head> <meta http-equiv="Content-Type" content="text ...

  8. 一本通&&洛谷——P1120 小木棍 [数据加强版]——题解

    题目传送 一道特别毒瘤能提醒人不要忘记剪枝的题. 首先不要忘了管理员的话.忘把长度大于50的木棍过滤掉真的坑了不少人(包括我). 显然是一道DFS题 .考虑剪枝. 找找搜索要面临的维度.状态:原始木棍 ...

  9. Android ListView焦点事件冲突问题与解决

    Android ListView对于单纯列表展示是很好用的,但是一旦牵扯到对listView进行操作就会遇到各种各样的问题.比如保存Checkbox状态与item复用的冲突.遇到可获取焦点的控件比如说 ...

  10. Xcode Server持续集成

    这是一篇2017-11-12 年我还在 ezbuy 的一篇文章,时间过去很早了,最近在整理笔记的时候发现了, 同步过来,文章内容现在是否有效不确定,应该大差不差,读者仅做参考 最后更新 2017-11 ...