好久没更过博了。。

首先断环为链,因为线段互相不包含,所以对每个线段\(i\)可以找一个满足\(r_j\geq l_i\)的\(l_j\)最小的线段,dp的时候\(i\)就会从\(j\)转移过来

然后就j点到i点连一条边,形成了一个森林

找方案可以枚举最右边的人\(r\),暴力向左跳,跳到一个\(x\)使得\(l_x+m\geq r\)就停下。r,x距离就是方案的人数,可以差分标记这些人

就做完了

注意断环为链的时候有些线段要copy一份

#include<bits/stdc++.h>
#define il inline
#define vd void
#define int ll
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct yyb{int l,r,i,o;}s[400010],sl[400010],sr[400010];
il bool cmpl(const yyb&a,const yyb&b){return a.l<b.l;}
il bool cmpr(const yyb&a,const yyb&b){return a.r<b.r;}
int fir[400010],dis[400010],nxt[400010],id;
il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
il bool operator<(const yyb&a,const yyb&b){return a.l<b.l;}
std::multiset<yyb>S;
bool yes[400010];
int st[19][400010],dep[400010],c[400010];
il vd dfs(int x){for(int i=fir[x];i;i=nxt[i])dep[dis[i]]=dep[x]+1,st[0][dis[i]]=x,dfs(dis[i]);}
il vd dfs2(int x){for(int i=fir[x];i;i=nxt[i])dfs2(dis[i]),c[x]+=c[dis[i]];}
int ans[400010];
bool ANS[200010];
signed main(){
int n=gi(),m=gi(),N=0;
for(int i=1;i<=n;++i){
++N;
s[N].l=gi(),s[N].r=gi();s[N].i=N;s[N].o=i;
if(s[N].l>s[N].r)s[N].r+=m,sl[N]=sr[N]=s[N];
else{
sl[N]=sr[N]=s[N];
++N,s[N]=s[N-1];s[N].i=N;
s[N].l+=m,s[N].r+=m;
sl[N]=sr[N]=s[N];
}
}
std::sort(sl+1,sl+N+1,cmpl);
std::sort(sr+1,sr+N+1,cmpr);
for(int i=1;i<=N;++i)S.insert(s[i]);
int p=1;
for(int i=1;i<=N;++i){
while(p<=N&&sr[p].r<sl[i].l)S.erase(S.find(sr[p])),++p;
if(!S.empty()&&S.begin()->l<sl[i].l)link(S.begin()->i,sl[i].i);
else yes[sl[i].i]=1;
}
for(int i=1;i<=N;++i)if(yes[i])dep[i]=1,dfs(i);
for(int i=1;i<19;++i)
for(int j=1;j<=N;++j)
st[i][j]=st[i-1][st[i-1][j]];
int _ans=1e9;
for(int i=1;i<=N;++i){
ans[i]=i;
for(int j=18;~j;--j)if(st[j][ans[i]]&&s[st[j][ans[i]]].l+m>s[i].r)ans[i]=st[j][ans[i]];
if(st[0][ans[i]])_ans=std::min(_ans,dep[i]-dep[ans[i]]+2);
}
for(int i=1;i<=N;++i)
if(st[0][ans[i]]&&dep[i]-dep[ans[i]]+2==_ans)
++c[i],--c[st[1][ans[i]]];
for(int i=1;i<=N;++i)if(yes[i])dfs2(i);
for(int i=1;i<=N;++i)if(c[i])ANS[s[i].o]=1;
for(int i=1;i<=n;++i)printf("%lld ",_ans+1-ANS[i]);
return 0;
}

#2007. 「SCOI2015」国旗计划的更多相关文章

  1. loj #2007. 「SCOI2015」国旗计划

    #2007. 「SCOI2015」国旗计划   题目描述 A 国正在开展一项伟大的计划 —— 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成 ...

  2. 【LOJ】#2007. 「SCOI2015」国旗计划

    题解 考虑朴素的做法,断环为链,复制2M个,找到一个位置i,f(i)是这个位置之前开始的线段,结束位置最远的位置在哪 然后对于每一个人,从自己线段的起点往下跳,跳到起点+M或以后的步数就是答案 我们发 ...

  3. AC日记——「SCOI2015」国旗计划 LiBreOJ 2007

    #2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...

  4. 「SCOI2015」国旗计划 解题报告

    「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...

  5. 「SCOI2015」小凸想跑步 解题报告

    「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...

  6. 「SCOI2015」小凸解密码 解题报告

    「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置 ...

  7. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

  8. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  9. loj#2009.「SCOI2015」小凸玩密室

    题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...

随机推荐

  1. 定制二选一按钮SwitchButton

    定制二选一按钮SwitchButton 效果: 源码: SwitchButton.h 与 SwitchButton.m // // SwitchButton.h // KongJian // // C ...

  2. 《C++ Primer Plus》读书笔记之九—使用类

    第十一章 使用类 1.操作符函数的格式:operator op(argument-list).op是将要重载的操作符. 2.操作符重载函数的两种调用方式:①函数表示法:C=A.operator+(B) ...

  3. Hyper-v 中 CentOS 连接外网之有线网卡

    一.打开虚拟机交换管理器,查看默认的虚拟交换机 如果不是内部网络,则需要新建一个虚拟交换机,新的交换机应该使用内部网络: 二.配置虚拟机使用的交换机.如果 “默认开关” 不是内部网络,需要使用自己新创 ...

  4. 我遇到的问题:耗时久/效率低 ---> 应对方案: 行动-结果指向

    这一篇打的时候,时间都挺靠后的了, 当时出现错误,很慌了,一个是时间比较久,5点多了,一个是陈果已经做了很多题了,这些是事实. 导致我慌张的原因,简单来说是比较,长久以来,我都爱去和别人比较.如果赢了 ...

  5. 【原创】Apache ab测试时出现:apr_socket_recv "connection reset by peer" 104

    今天在用Apache自带的ab工具做以下简单的压测,本来是随便填几个参数,发现ab在1000并发以上报错:apr_socket_recv "connection reset by peer& ...

  6. 安装mysql中遇到的问题1

    我的debian7之前安装了mysql-server,是通过apt安装的,后来我卸载掉, 然后用whereis mysql查找, 把所有关于mysql的目录删除掉,包括带mysqld的目录及文件. 重 ...

  7. WebForm下的$.ajax中contentType: “application/json” 的用法

    不使用contentType: “application/json”则data可以是对象 $.ajax({ url: actionurl, type: "POST", datTyp ...

  8. virtualbox+vagrant学习-2(command cli)-6-vagrant init命令

    Init——创建Vagrantfile文件 格式: vagrant init [options] [name [url]] 通过创建初始的Vagrantfile文件(如果不存在的话),将当前目录初始化 ...

  9. SSM框架之RestFul示例

    演示环境:maven+Spring+SpringMVC+MyBatis Plus或MyBatis都行+JDK8 JDK7我想应该没有问题,原因是用的基本都是JDK6或者JDK7的相关特性. 当然了,J ...

  10. 访问 IIS 元数据库失败解决问题的方法

    近日调试一Asp.net程序,出现了“访问 IIS 元数据库失败”的错误信息,最后经过搜索发现了解决问题的方法. 解决方法如下: 1.依次点击“开始”-“运行”. 2.在“运行”栏内输入 “C:\WI ...