博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JZOJ5801】【2018.8.12省选模拟】circular
阅读量:4538 次
发布时间:2019-06-08

本文共 1008 字,大约阅读时间需要 3 分钟。

题目大意

1388604-20180813211724617-411832741.png

分析

把环拆开

线段其实就是区间
对于每个区间,向在TA后面并且b_i最小的区间连边,
然后从每个区间(ai,bi)开始,在保证跳到的区间(aj,bj),bj<=ai+m的情况下向后倍增。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int inf=2147483647;const int mo=1e9+7;const int N=100005;using namespace std;struct arr{ int x,y,be;}a[N*2],b[N*2];int n,m,g[N*2][25],mn[N*2],ans;bool cmp(arr x,arr y){ return x.y
a[i].y) a[i].y+=m; a[i+n].x=a[i].x+m,a[i+n].y=a[i].y+m; } sort(a+1,a+1+n,cmp); for(int i=1;i<=n*2;i++) b[i]=a[i],b[i].be=i; sort(b+1,b+1+n,cmp1); a[0].y=b[n*2+1].y=inf,mn[n*2+1]=n*2+1; for(int i=n*2;i>=1;i--) mn[i]=b[i].y
b[mn[pos]].x && pos<=n*2) pos++; g[i][0]=b[mn[pos]].be; } for(int j=1;j<=20;j++) for(int i=1;i<=n*2;i++) g[i][j]=g[g[i][j-1]][j-1]; ans=1; for(int i=1;i<=n;i++) { int k=i,sum=0; for(int j=20;j>=0;j--) if(a[g[k][j]].y<=a[i].x+m) k=g[k][j],sum+=1<

转载于:https://www.cnblogs.com/chen1352/p/9471080.html

你可能感兴趣的文章
Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)A. Protect Sheep
查看>>
php用户名密码
查看>>
Mysql 更改最大连接数
查看>>
sqlserver 2012 重启是 ID 自动增长 1000的问题
查看>>
oracle用户连接失败
查看>>
json粗浅认识
查看>>
java学习笔记之基础知识
查看>>
电子商务(电销)平台中商品模块(Product)数据库设计明细(转载)
查看>>
docker 练习
查看>>
day 18
查看>>
IOS开发学习---自动调整旋转和调整大小的动画效果
查看>>
动态路由的意义,以及路由重定向
查看>>
【转】sqlserver使用sql导出索引
查看>>
图论专题II
查看>>
Java占位符替换工具类
查看>>
<strong>和 <b> 的区别
查看>>
HTML5 20180919
查看>>
后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法
查看>>
缓存技术
查看>>
linux64需要增加的依赖库
查看>>