bzoj4444 国旗计划
倍增,预处理出每个点往后$2^i$个应该选哪个人
我用的treap就是快
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define rre(i,r,l) for(int i=(r);i>=(l);i--)
#define re(i,l,r) for(int i=(l);i<=(r);i++)
#define Clear(a,b) memset(a,b,sizeof(a))
#define inout(x) printf("%d",(x))
#define douin(x) scanf("%lf",&x)
#define strin(x) scanf("%s",(x))
#define LLin(x) scanf("%lld",&x)
#define op operator
#define CSC main
typedef unsigned long long ULL;
typedef const int cint;
typedef long long LL;
using namespace std;
void inin(int &ret)
{
ret=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<='')ret*=,ret+=ch-'',ch=getchar();
ret=f?-ret:ret;
}
namespace treap
{
const int xxx=;
int w[xxx],id[xxx],r[xxx],ch[xxx][],ed,root;
void rotate(int &k,int d)
{
int p=ch[k][d^];
ch[k][d^]=ch[p][d];
ch[p][d]=k;k=p;
}
void add(int &k,int x,int ID)
{
if(!k)
{
k=++ed;w[k]=x,id[k]=ID;r[k]=rand();
return ;
}
int d=x>w[k];
add(ch[k][d],x,ID);
if(r[ch[k][d]]<r[k])rotate(k,d^);
}
int findhou(int x)
{
int k=root,ret=;
while(k)
if(w[k]>x)ret=w[k],k=ch[k][];
else k=ch[k][];
return ret;
}
int findqian(int x)
{
if(!x)x=;
int k=root,ret=;
while(k)
if(w[k]<x)ret=id[k],k=ch[k][];
else k=ch[k][];
return ret;
}
void add(int x,int ID){add(root,x,ID);}
};
int n,m;
struct wocao
{
int l,r,id;
void in(int i){inin(l),inin(r),id=i;if(r<l)r+=m;}
bool op < (const wocao &a)const {return l<a.l;}
}a[];
int fa[][],ans[];
void hh(int x)
{
int temp=a[x].id,R=m+a[x].l;
rre(i,,)if(fa[x][i])
if(a[fa[x][i]].r<R)
x=fa[x][i],ans[temp]+=<<i;
}
set<pair<int,int> >ss;
int main()
{
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
inin(n),inin(m);
re(i,,n)a[i].in(i);
re(i,n+,n<<)a[i]=a[i-n],a[i].l+=m,a[i].r+=m,a[i].id=;
n<<=;
sort(a+,a+n+);
// for(int i=1;i<=n;i++)printf("%d %d\n",a[i].l,a[i].r);
treap::add(a[n].l,n);
// ss.insert(make_pair(a[n].l,n));
rre(i,n-,)
{
fa[i][]=treap::findqian(treap::findhou(a[i].r));
// fa[i][0]=(--ss.upper_bound(make_pair(a[i].r,0x7FFFFFFF)))->second;
// printf("%d\n",fa[i][0]);
treap::add(a[i].l,i);
// ss.insert(make_pair(a[i].l,i));
}
re(i,,)rre(j,n,)fa[j][i]=fa[fa[j][i-]][i-];
re(i,,n)if(a[i].id)
hh(i);
re(i,,n>>)printf("%d ",ans[i]+);
return ;
}
bzoj4444 国旗计划的更多相关文章
- [bzoj4444] 国旗计划 双指针+倍增
Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边 ...
- luogu4155/bzoj4444 国旗计划 (倍增)
成环,把每个区间变成两个然后展开成链 一个人的下一个人肯定是在彼此相交的基础上,右端点越大越好 于是就把它连到相交的.右端点最大的点上,连成一棵树 于是每次只要从某个节点开始,一直在树上跳到覆盖了一个 ...
- 【bzoj4444 scoi2015】国旗计划
题目描述 A 国正在开展一项伟大的计划 —— 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 NN 名优秀的边防 ...
- 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增
[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...
- [BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增)
[BZOJ4444] [Luogu 4155] [LOJ 2007] [SCOI2015]国旗计划(倍增) 题面 题面较长,略 分析 首先套路的断环为链.对于从l到r的环上区间,若l<=r,我们 ...
- 【bzoj4444】[Scoi2015]国旗计划 倍增
题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈? 输入 第1行,包含2个正整数N,M,分别表示边防战士数量和 ...
- 【BZOJ4444】国旗计划 - 决策单调性
Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边 ...
- [bzoj4444] [loj#2007] [洛谷P4155] [Scoi2015] 国旗计划
Description \(A\) 国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 ...
- bzoj 4444: [Scoi2015]国旗计划
Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的 ...
随机推荐
- MySQL分支Percona
MySQL分支Percona 转载自:http://www.cnblogs.com/cevin/archive/2012/05/12/2496859.html 官方网站:http://www.perc ...
- 安装与破解PyCharm专业版
安装与破解PyCharm专业版(有两种方法) 一.安装与破解PyCharm专业版 1.安装pycharm(建议安装python3) 这是网址:(https://www.jetbrains.com/py ...
- ftp工具类
package com.ytd.zjdlbb.service.zjdlbb; import java.io.File;import java.io.FileInputStream;import jav ...
- secure CRT常用的查看服务器日志命令
tail -f /(日志文件目录) 查看日志命令ctrl+c停止打印ls -al 查看文件的详细信息路径等vi /(日志文件目录) 打开日志/搜索字符退出:按ESC后,按“:”,输入q, ...
- PHP数组对象对比机制
$a = [1,2]; $b = [1,'2']; var_dump($a == $b); // true var_dump($a === $b); // false $c = ['ab'=>' ...
- ie6-ie8支持CSS3选择器的解决办法
引入nwmatcher.js和selectivizr.js <!--[if lt IE 10]> <script src="html5shiv.js">&l ...
- 异常:分为 严重性错误:Error 异常:Exception
异常:是在运行时期发生的不正常情况.在java中用类的形式对不正常情况进行了描述和封装对象描述不正常的情况的类,就称为异常类以前:正常流程代码和问题处理代码相结合现在将正常流程代码和问题处理代码分离, ...
- [LeetCode] 613. Shortest Distance in a Line_Easy tag: SQL
Table point holds the x coordinate of some points on x-axis in a plane, which are all integers. Writ ...
- 极限树(extraTree)总结
随机森林:是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定.随机森林对回归的结果在内部是取得平均但是并不是所有的回归都是取的平均,有些是取的和. 随机森林里的随机 极限树 ...
- Entity Framework Code First(概要)
EF开源项目地址:https://github.com/aspnet/EntityFramework6 MSDN :https://msdn.microsoft.com/en-us/library/a ...