题目传送门


分析

有一个很简单的做法就是处理出每个位置能够一次到达的最左边的右端点(后继)。

然后直接从 \(l\) 开始能跳就跳,这样单次询问时间复杂度是 \(O(n)\) 的。

观察到时间复杂度因为跳跃和处理右端点被浪费了。

可不可以一下子跳很多步,并且处理一堆右端点。

其实这两个需求是负相关的,需要平衡规划,那么让它们各自保持 \(\sqrt{n}\) 的复杂度就可以了。

将 \(n\) 个位置分块,维护后继、跳出块的后继、跳出块的步数(初始化为1),然后对于 \(l\) 之前的块打标记,对于 \(l\) 所在的块标记下传再修改。

询问的时候最多跳 \(\sqrt{n}\) 个块,所以总时间复杂度是 \(O(m\sqrt{n})\) 的。


代码

#include <cstdio>
#include <cctype>
#include <cmath>
using namespace std;
const int N=300011,inf=0x3f3f3f3f;
int L[N],R[N],n,m,bl,pos[N],dis[N],lazy[N],nxt[N],Nxt[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int min(int a,int b){return a<b?a:b;}
int main(){
m=iut(),n=iut(),bl=sqrt(n+1);
for (int i=1;i<=n+1;++i) pos[i]=(i-1)/bl+1;
for (int i=1;i<=n+1;++i){
if (!L[pos[i]]) L[pos[i]]=i;
R[pos[i]]=i,lazy[pos[i]]=inf;
}
for (int i=1;i<=n+1;++i) Nxt[i]=nxt[i]=inf,dis[i]=1;
for (int i=1;i<=m;++i){
int opt=iut(),l=iut(),r=iut(),t=pos[l];
if (opt==1){
for (int i=1;i<t;++i) lazy[i]=min(lazy[i],r+1);
if (lazy[t]!=inf){
for (int i=L[t];i<=R[t];++i)
if (lazy[t]<nxt[i])
nxt[i]=Nxt[i]=lazy[t],dis[i]=1;
lazy[t]=inf;
}
if (t<pos[r+1]){
for (int i=L[t];i<=l;++i)
if (r+1<nxt[i])
nxt[i]=Nxt[i]=r+1,dis[i]=1;
}else for (int i=L[t];i<=l;++i)
if (r+1<nxt[i]) nxt[i]=r+1,dis[i]=dis[nxt[i]]+1;
for (int i=R[t];i>=L[t];--i)
if (nxt[i]<=R[t])
dis[i]=dis[nxt[i]]+1,Nxt[i]=Nxt[nxt[i]];
}else{
int ans=0;
while (1){
int now=min(lazy[pos[l]],Nxt[l]);
if (now<=r+1) ans+=dis[l],l=now;
else if (nxt[l]<=r+1) ++ans,l=nxt[l];
else break;
}
print(ans),putchar(10);
}
}
return 0;
}

#分块,懒标记#LOJ 3631「2021 集训队互测」学姐买瓜的更多相关文章

  1. @loj - 2461@ 「2018 集训队互测 Day 1」完美的队列

    目录 @description@ @solution@ @part - 0@ @part - 1@ @accepted code@ @details@ @description@ 小 D 有 n 个 ...

  2. 【LOJ2461】「2018 集训队互测 Day 1」完美的队列(分块+双指针)

    点此看题面 大致题意: 让你维护\(n\)个有限定长度的队列,每次区间往队列里加数,求每次加完后的队列里剩余元素种类数. 核心思路 这道题可以用分块+双指针去搞. 考虑求出每个操作插入的元素在队列中被 ...

  3. LOJ3069. 「2019 集训队互测 Day 1」整点计数(min_25筛)

    题目链接 https://loj.ac/problem/3069 题解 复数真神奇. 一句话题意:令 \(f(x)\) 表示以原点 \((0, 0)\) 为圆心,半径为 \(x\) 的圆上的整点数量, ...

  4. LOJ2476. 「2018 集训队互测 Day 3」蒜头的奖杯 & LOJ2565. 「SDOI2018」旧试题(莫比乌斯反演)

    题目链接 LOJ2476:https://loj.ac/problem/2476 LOJ2565:https://loj.ac/problem/2565 题解 参考照搬了 wxh 的博客. 为了方便, ...

  5. [JZOJ6088] [BZOJ5376] [loj #2463]【2018集训队互测Day 1】完美的旅行【线性递推】【多项式】【FWT】

    Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记 ...

  6. LOJ3075 「2019 集训队互测 Day 3」组合数求和

    题意: 令 \(f(j)=\sum\limits_{i=0}^{n-1}\dbinom{id}{j}\) ,对于 \(0\le j <m\) ,分别求出 \(f(j)\) .答案对 \(M\) ...

  7. 【loj2461】【2018集训队互测Day 1】完美的队列

    #2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...

  8. [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞

    [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...

  9. Loj #2731 「JOISC 2016 Day 1」棋盘游戏

    Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...

  10. 【2018集训队互测】【XSY3372】取石子

    题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...

随机推荐

  1. win32 - 对于32位的应用程序,LoadResource为什么不需要释放资源

    原话: [此功能已过时,仅支持与16位Windows向后兼容.对于32位Windows应用程序,不必释放使用LoadResource加载的资源.如果在32或64位Windows系统上使用,此函数将返回 ...

  2. JVM运行时参数

    JVM运行时参数 JVM运行时参数是用于配置和调整Java虚拟机的行为和性能的参数.这些参数可以在启动Java应用程序时通过命令行或配置文件进行设置,合理配置参数可以使JVM虚拟机的达到更好的性能,降 ...

  3. 【Azure Developer】AAD API如何获取用户“Block sign in”信息(accountEnabled)

    问题描述 使用API获取所有Azure AD中的用户列表,API所参考的文档:https://docs.microsoft.com/en-us/graph/api/user-list?view=gra ...

  4. 非正式全面解析 NebulaGraph 中 Session 管理

    NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Ses ...

  5. Zabbix与乐维监控对比分析(三)——对象管理篇

    大家好,我是乐乐.今天就不更新zabbix6.0的使用教程了.在前面的文章中,我们详细介绍了Zabbix与乐维监控在架构.性能.Agent管理.自动发现.权限管理等方面的对比分析,本篇是Zabbix对 ...

  6. Zabbix6.0使用教程 (五)—zabbix从二进制包安装上篇

    大家好,我是乐乐.上一期我们已经讲过从源代码安装zabbix,本期着重讲从二进制包安装zabbix. 当我们在ZABBIX官方存储库可以看到,Zabbix SIA 提供如下官方RPM和DEB包: ·R ...

  7. 制作B站直播简介

    本文只用于个人总结备份,如果对你有帮助就更好了. 准备工作 准备好简介要用的的背景图.头像图,上传到图床生成图片链接. 简介的内容可分为主播简介.直播时间.直播内容.联系方式,内容根据实际需要修改,需 ...

  8. 2.4g无线私有协议透传方案特色梳理

    为什么?  在2.4G这个频段,的确有待你拥挤,有提供高速上网的wifi,有提供短距离数据和云音乐传输的bt,还要各种xx的东西.在wifi和bt无法覆盖的领域,又出来一个2.4G私有协议传输芯片,这 ...

  9. day10-Spring Cloud Alibaba Nacos-服务注册与配置中心

    Spring Cloud Alibaba Nacos-服务注册与配置中心 官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cl ...

  10. day16--Java常用类04

    Java常用类 4.字符串相关类练习 4.1StringBuilder练习 package li.normalclass.stringbuilder; public class TestBuffer ...