传送门
题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4,5][1,3],[4,5]不合法[1,4],[4,5][1,4],[4,5][1,4],[4,5]合法。


思路:把坐标先离散化,然后破环为链,接着用线段树维护每个点向左走一步最多走到哪个点,然后就可以用ststst表维护每个点向左走2k2^k2k步最多走到哪个点,最后对于每条线段倍增求答案即可。
代码:

#include<bits/stdc++.h>
#define fi first
#define se second
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){static char buf[rlen],*ib,*ob;(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));return ib==ob?-1:*ib++;
}
inline int read(){int ans=0;char ch=gc();while(!isdigit(ch))ch=gc();while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();return ans;
}
typedef pair<int,int> pii;
const int N=8e5+5;
int n,m,val[N],sig=0,st[N][20],vl[2][N],vr[2][N];
pii a[N];
namespace sgt{#define lc (p<<1)#define rc (p<<1|1)#define mid (l+r>>1)int mx[N<<2];inline void pushnow(int p,int v){mx[p]=max(mx[p],v);}inline void pushdown(int p){pushnow(lc,mx[p]),pushnow(rc,mx[p]);}inline void update(int p,int l,int r,int ql,int qr,int v){if(ql<=l&&r<=qr)return pushnow(p,v);pushdown(p);if(qr<=mid)update(lc,l,mid,ql,qr,v);else if(ql>mid)update(rc,mid+1,r,ql,qr,v);else update(lc,l,mid,ql,mid,v),update(rc,mid+1,r,mid+1,r,v);}inline void query(int p,int l,int r){if(l==r){st[l][0]=mx[p];return;}pushdown(p);query(lc,l,mid),query(rc,mid+1,r);}#undef lc#undef rc#undef mid
}
inline int find(const int&x){return lower_bound(val+1,val+sig+1,x)-val;}
inline int query(int s,int t){int ret=0;for(ri i=19;~i;--i){if(!st[s][i]||st[s][i]>=t)continue;s=st[s][i];ret|=1<<i;}return ret+1;
}
int main(){n=read(),m=read();val[++sig]=1,val[++sig]=m,val[++sig]=m+1,val[++sig]=m<<1;for(ri i=1;i<=n;++i)val[++sig]=a[i].fi=read(),val[++sig]=a[i].se=read(),val[++sig]=a[i].fi+m,val[++sig]=a[i].se+m;sort(val+1,val+sig+1),sig=unique(val+1,val+sig+1)-val-1;for(ri i=1;i<=n;++i)vl[0][i]=find(a[i].fi),vl[1][i]=find(a[i].fi+m),vr[0][i]=find(a[i].se),vr[1][i]=find(a[i].se+m);for(ri i=1;i<=n;++i){if(a[i].fi<=a[i].se){sgt::update(1,1,sig,vl[0][i],vr[0][i],vr[0][i]);sgt::update(1,1,sig,vl[1][i],vr[1][i],vr[1][i]);}else{sgt::update(1,1,sig,1,vr[0][i],vr[0][i]);sgt::update(1,1,sig,vl[0][i],vr[1][i],vr[1][i]);sgt::update(1,1,sig,vl[1][i],sig,sig);}}sgt::query(1,1,sig);for(ri j=1;j<20;++j)for(ri i=1;i<=sig;++i)st[i][j]=st[st[i][j-1]][j-1];for(ri i=1;i<=n;++i)cout<<1+query(a[i].se<a[i].fi?vr[1][i]:vr[0][i],vl[1][i])<<' ';return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/10633609.html

2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)相关推荐

  1. bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为 m m m的环,有 n n n条互不包含的线段,问如果强制选第 i i i条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即 [ 1 , 3 ] ...

  2. 【bzoj4444】[Scoi2015]国旗计划 倍增

    题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈? 输入 第1行,包含2个正整数N,M,分别表示边防战士数量和 ...

  3. 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]

    P2826 [USACO08NOV]光开关Light Switching 题目描述 Farmer John tries to keep the cows sharp by letting them p ...

  4. 洛谷P2073 送花 [2017年6月计划 线段树01]

    P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...

  5. The Preliminary Contest for ICPC Asia Shanghai 2019 B. Light bulbs(卡了线段树空间的思维题)

    传送门:https://nanti.jisuanke.com/t/41399 题目描述 There are NNN light bulbs indexed from 000 to N−1N−1N−1. ...

  6. 计蒜之道2019 复赛 A.外教 Michale 变身大熊猫 线段树辅助建分层图dp

    题意:给出一个序列,随机取出其中一条最长上升子序列,问你取到每个数的概率是多少. 说起概率,我们可以尝试去求最长上升子序列的个数,显然每个点被取到的概率是 含有这个点的最长上升子序列个数/总共最长上升 ...

  7. P4092-[HEOI2016/TJOI2016]树【线段树,倍增】

    正题 题目链接:https://www.luogu.com.cn/problem/P4092 题目大意 nnn个点的树要求支持以下操作 给一个点打上标记 求一个节点最近的打上了标记的祖先 解题思路 就 ...

  8. 2019.03.21【ZJOI2007】【BZOJ1095】【洛谷P2056】Hide 捉迷藏(DFS序)(线段树)

    BZOJ传送门 洛谷传送门 解析: 其实就是QTREE4的弱化版,可以直接用QTREE4的解法来做. 但是这道题有优秀的O(nlog⁡n)O(n\log n)O(nlogn)做法. 我们考虑利用DFS ...

  9. react优秀项目案例_关于进行2019年北京市高等学校“实培计划”项目——毕业设计(创业类)项目总结与优秀项目案例征集的通知...

    BIT 关于进行2019年北京市高等学校"实培计划"项目--毕业设计(创业类)项目总结与优秀项目案例征集的通知 各相关学院: 为贯彻落实<北京高等学校高水平人才交叉培养计划& ...

最新文章

  1. 如何让你的Nginx 提升10倍性能?
  2. viso 画背景框_3分钟漫画教程 | Q版漫画少女线稿,画完暖暖的
  3. 微信小程序的搜索和重置功能
  4. 找中位数,找第k小,还存在问题
  5. 我是如何使用git把本地代码上传到github上的,值得借鉴
  6. 机器学习的练功方式(十)——岭回归
  7. 有没有什么方法快速能找到导致软件崩溃的进程_崩溃!电脑突然黑屏无法启动...
  8. ASP.NET MVC 4 视图页去哪里儿
  9. 监控zabbix 服务并在异常时python 邮件报警
  10. Mybatis 一对多
  11. 服务器断开消息,Websockets - 断开服务器消息
  12. FPGA-VGA驱动
  13. 数据可视化基本套路总结
  14. 安卓平板隐藏虚拟按键_实现安卓设备虚拟按键隐藏和显示的方法和系统的制作方法...
  15. SQL进阶教程——自连接的用法(第二章)
  16. 2012暑期川西旅游之第八天(青城山-成都)
  17. 二手行业能找回“消失的五年”吗?
  18. opencv学习笔记(三)—— 利用图像金字塔进行图像无缝拼接,cv2.pyrDown() ,cv2.pyrUp()
  19. Android插件中使用EventBus出现java.lang.IllegalArgumentException: Expected receiver of type xxx, but got xx
  20. layui 表格实现可编辑日历

热门文章

  1. 无穷小的比较(o(f(x))的意义)
  2. 从ES5到ESNext-这是自2015年以来添加到JavaScript的所有功能
  3. windows powershell实战指南(第3版)_Windows命令行工具cmder配置(转)
  4. 白兵机器人怎样连接_“玩具之家”的新宠——星战白兵冲锋队员机器人体验
  5. 我喜欢的一篇关于家庭教育的文章
  6. 虚拟机终端输入sudo的密码时,无法输入密码
  7. 热门编程语言那么多,该选择哪个
  8. bootstrap4导航栏居右
  9. spring-boot 深入学习
  10. Karabiner配置