题目传送门


分析

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

然后直接从 \(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. [Android 逆向]旅行青蛙破解

    1. 旅行青蛙V1.0,4 apk 安装到手机,可以运行 2. jadx 打开apk 存在这两个dll ,说明是 unity开发的 3. 导出Assembly-CSharp.dll, 使用DnSpy ...

  2. Windows11补丁更新后无法使用Wifi和蓝牙

    最近在我的ThinkPAD T14上更新了Windows 11补丁,重启后Wifi和蓝牙鼠标都不能使用了,无法连接Wifi网络,也无法添加蓝牙设备. 使用厂家自带的管理工具查看驱动都是最新的,一度不知 ...

  3. sql注入简单初

    import requests,sys,time from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon from threading ...

  4. 【LeetCode剑指offer 02】矩阵中的路径(老鼠走迷宫plus,应用深度优先搜索与回溯机制)

    矩阵中的路径 https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof/ 给定一个 m x n 二维字符网格 board 和一个字符串单词 ...

  5. Windows开发环境如何启用Directory.Build.props版本号集中管理

    每个产品一个根目录 Directory.Build.props的工作模式和NuGet.Config不同,Directory.Build.props不能继承.当dotnet restore工作的时候,会 ...

  6. 【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答

    问题描述 PHP应用再连接Azure Redis服务时,出现Connection Timed out.当通过升级提高Azure Redis的性能时候,发现之前的数据丢失了. 问题解答 当Redis服务 ...

  7. 【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案

    问题描述 在使用 Github Action  -  Azure/login@v1 的插件时候,登录中国区Azure遇见了问题. Login YAML 内容: - name: 'Login via A ...

  8. 【Azure 应用服务】如何查看App Service中的私网IP地址?

    问题描述 在使用App Service服务时,可以通过Azure 门户中的属性功能查看出站IP列表. 如果把App Service与虚拟网络(VNET)集成后,它就可以直接访问虚拟网络内部资源,那么如 ...

  9. 【Azure 媒体服务】记录一个简单的媒体视频上传到Media Service无法播放问题

    问题描述 从本地上传到Azure Media Service Portal的视频,并且新增定位符后,无法播放.但是上传的其他视频是可以的.疑惑中!! 问题自查 自查发现,是视频的文件名中有个特殊符号. ...

  10. spark conf、config配置项总结

    1.structured-streaming的state 配置项总结 Config Name Description Default Value spark.sql.streaming.stateSt ...