「SCOI2015」国旗计划 解题报告
「SCOI2015」国旗计划
蛮有趣的一个题
注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下
然后往后面跳拿倍增优化一下
Code:
#include <cstdio>
#include <cctype>
#include <algorithm>
#define int unsigned int
const int N=4e5+10;
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
int n,m,ans[N],q[N],l,r,f[N][20];
struct yuucute
{
int l,r,id;
bool friend operator <(yuucute a,yuucute b){return a.r<b.r;}
}yuu[N];
signed main()
{
read(n),read(m);
for(int i=1;i<=n;i++)
{
read(yuu[i].l),read(yuu[i].r);
if(yuu[i].r<yuu[i].l) yuu[i].r+=m;
yuu[i].id=i;
yuu[i+n]=yuu[i];
yuu[i+n].l+=m,yuu[i+n].r+=m;
}
std::sort(yuu+1,yuu+1+(n<<1));
f[n<<1][0]=n<<1,q[l=r=1]=n<<1;
for(int i=(n<<1)-1;i;i--)
{
while(yuu[q[l]].l>yuu[i].r) ++l;
f[i][0]=q[l];
q[++r]=i;
}
for(int j=1;j<=19;j++)
for(int i=1;i<=n<<1;i++)
f[i][j]=f[f[i][j-1]][j-1];
for(int i=1;i<=n;i++)
{
int x=i,l=yuu[i].l,id=yuu[i].id;
for(int j=19;~j;j--)
if(yuu[f[x][j]].r-l<m)
x=f[x][j],ans[id]|=1<<j;
ans[id]+=2;
}
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
return 0;
}
2019.3.3
「SCOI2015」国旗计划 解题报告的更多相关文章
- AC日记——「SCOI2015」国旗计划 LiBreOJ 2007
#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...
- loj #2007. 「SCOI2015」国旗计划
#2007. 「SCOI2015」国旗计划 题目描述 A 国正在开展一项伟大的计划 —— 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成 ...
- #2007. 「SCOI2015」国旗计划
好久没更过博了.. 首先断环为链,因为线段互相不包含,所以对每个线段\(i\)可以找一个满足\(r_j\geq l_i\)的\(l_j\)最小的线段,dp的时候\(i\)就会从\(j\)转移过来 然后 ...
- 【LOJ】#2007. 「SCOI2015」国旗计划
题解 考虑朴素的做法,断环为链,复制2M个,找到一个位置i,f(i)是这个位置之前开始的线段,结束位置最远的位置在哪 然后对于每一个人,从自己线段的起点往下跳,跳到起点+M或以后的步数就是答案 我们发 ...
- 「FJOI2016」神秘数 解题报告
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...
- 「ZJOI2016」大森林 解题报告
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...
- 「SCOI2016」背单词 解题报告
「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...
- 「NOI2015」寿司晚宴 解题报告
「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...
- 「JLOI2015」骗我呢 解题报告?
「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...
随机推荐
- java总结:字符串切割
java中String.split()用法 在java.lang包中有String.split()方法,返回是一个数组.1.“.”和“|”都是转义字符,必须得加"\\"; 所以如果 ...
- Redis启动及密码修改
.cmd启动Redis: redis-server.exe redis.windows.conf #注意指定配置文件来启动 .cmd登陆redis redis-cli.exe -h -a .修改密码 ...
- Handling duplicate form submission in Spring MVC
javaweb开发之防止表单重复提交 - u012843873的博客 - CSDN博客 https://blog.csdn.net/u012843873/article/details/5526212 ...
- JavaScript中变量、执行环境、作用域与C#中的异同
首先需要明确一个执行环境的概念,执行环境这个概念是用来理解作用域的,在js中,执行环境分为全局执行环境和局部(function)执行环境,而在C#这类的C类语言中,还有一个块级别的执行环境,如if语句 ...
- Docker操作删除所有容器镜像
借鉴博客:https://www.cnblogs.com/yanyouqiang/p/8301856.html https://blog.csdn.net/wy_97/article/details/ ...
- bootstrap3兼容IE8
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C程序运行时的内存分布
该篇博客是自己学习的总结,如果有哪里理解的不对的地方,希望大家可以指点. 一.C内存空间分布图 二.各内存区域详解 1.代码区(.text): 该区域主要存放二进制可执行文件. 2.数据区(.data ...
- java.lang.Comparable 接口 详解
参考https://blog.csdn.net/itm_hadf/article/details/7432782 http://www.blogjava.net/jjshcc/archive/2011 ...
- Python OpenCV人脸识别案例
■环境 Python 3.6.0 Pycharm 2017.1.3 ■库.库的版本 OpenCV 3.4.1 (cp36) ■haarcascades下载 https://github.com/ope ...
- vue計算屬性
計算屬性:computed 和method的差別:computed是基於它的依賴緩存,只有它的相關依賴發生改變時才會重新獲取值. method是在重新渲染時,函數總會重新調用. comuputed:默 ...