成环,把每个区间变成两个然后展开成链

一个人的下一个人肯定是在彼此相交的基础上,右端点越大越好

于是就把它连到相交的、右端点最大的点上,连成一棵树

于是每次只要从某个节点开始,一直在树上跳到覆盖了一个M为止,统计数量

这个可以倍增来做

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=4e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
ll l,r;int id;
}pos[maxn];
int N,M,ans[maxn];
int fa[maxn][]; inline bool cmp(Node a,Node b){return a.l<b.l;} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd(),M=rd();
for(i=;i<=N;i++){
ll a=rd(),b=rd();
if(b<a) b+=M;
pos[i].id=i,pos[i+N].id=i+N;
pos[i].l=a,pos[i].r=b;
pos[i+N].l=a+M,pos[i+N].r=b+M;
}
sort(pos+,pos+N*+,cmp);
for(i=N*,j=N*;i;i--){
for(;j>i+&&pos[j].l>pos[i].r;j--);
if(j>i&&pos[j].l<=pos[i].r)
fa[i][]=j;
// printf("%d %d\n",pos[i].id,pos[fa[i][0]].id);
for(k=;fa[i][k]&&fa[fa[i][k]][k];k++)
fa[i][k+]=fa[fa[i][k]][k];
}
for(i=;i<=N;i++){
int x=i;
// printf("%d\n",pos[i].id);
for(j=;j>=;j--){
if(fa[x][j]&&pos[fa[x][j]].r<pos[i].l+M)
ans[pos[i].id]+=(<<j),x=fa[x][j];
}ans[pos[i].id]+=;
}
for(i=;i<=N;i++)
printf("%d ",ans[i]);
return ;
}

最新文章

  1. iOS开发-- 通过runtime kvc 移除导航栏下方的阴影效果线条
  2. ACM/ICPC2016 青岛区域赛
  3. 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎
  4. dotNet中初始化器的使用
  5. synchronized(this) 和synchronized(xxx.class)的区别和联系
  6. ModSecurity for Nginx
  7. c/c++与java------之JNI学习(一)
  8. Angular-UI-Router 学习笔记
  9. 为 ngui TweenPosition 添加 pingpongone
  10. led.c驱动框架2nd
  11. 刨根究底字符编码之八——Unicode编码方案概述
  12. cocoapods管理以及常遇到的问题
  13. Vue 进阶之路(六)
  14. 《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结
  15. SpringCloud Feign
  16. 剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前
  17. 11G新特性 -- 分区表和增量统计信息
  18. 51.纯 CSS 创作一个雷达扫描动画
  19. 模板 Template
  20. [日常] HEOI 2019 退役记

热门文章

  1. CF1039E Summer Oenothera Exhibition 根号分治,LCT,ST表
  2. mfc 纯虚函数和抽象类
  3. [Deep-Learning-with-Python]机器学习基础
  4. CodeForces-1155D Beautiful Array
  5. 使用VS2013和git进行代码管理
  6. allegro 封装 (引脚编号修改)
  7. alpha发布排序结果
  8. Scrum Meeting day 2
  9. 《Linux内核分析》 第六节 进程的描述和进程的创建
  10. “数学口袋精灵”第二个Sprint计划---第一天