正题

题目链接:https://www.luogu.com.cn/problem/CF803G


题目大意

一个长度为nnn的序列aaa复制kkk份连接,要求支持

  1. 区间赋值
  2. 区间查询最小值

n,q∈[1,105],k∈[1,104]n,q\in[1,10^5],k\in[1,10^4]n,q∈[1,105],k∈[1,104]


解题思路

先把所有查询的连续区间边界离散化了,这样最多有2q−12q-12q−1个区间,每个区间用STSTST查询最小值代替,然后建一个线段树操作即可。

也不知道怎么黑的

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10,inf=1e9+7;
int n,m,cnt,f[N][20],l[N],r[N],c[N],op[N];
int b[N<<1],w[N<<3],lazy[N<<3],lg[N];
int RMQ(int l,int r){if(l>r)return inf;int z=lg[r-l+1];return min(f[l][z],f[r-(1<<z)+1][z]);
}
void Downdata(int x){if(!lazy[x])return;w[x*2]=lazy[x*2]=lazy[x];w[x*2+1]=lazy[x*2+1]=lazy[x];lazy[x]=0;return;
}
void Change(int x,int L,int R,int l,int r,int val){if(L==l&&R==r){lazy[x]=w[x]=val;return;}int mid=(L+R)>>1;Downdata(x);if(r<=mid)Change(x*2,L,mid,l,r,val);else if(l>mid) Change(x*2+1,mid+1,R,l,r,val);else Change(x*2,L,mid,l,mid,val),Change(x*2+1,mid+1,R,mid+1,r,val);w[x]=min(w[x*2],w[x*2+1]);return;
}
int Ask(int x,int L,int R,int l,int r){if(L==l&&R==r)return w[x];int mid=(L+R)>>1;Downdata(x);if(r<=mid)return Ask(x*2,L,mid,l,r);if(l>mid)return Ask(x*2+1,mid+1,R,l,r);return min(Ask(x*2,L,mid,l,mid),Ask(x*2+1,mid+1,R,mid+1,r));
}
int main()
{scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&f[i][0]);for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;for(int j=1;(1<<j)<=n;j++)for(int i=0;i+(1<<j)<=n;i++)f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&op[i],&l[i],&r[i]);if(op[i]==1)scanf("%d",&c[i]);l[i]--;b[++cnt]=l[i];b[++cnt]=r[i];}sort(b+1,b+1+cnt);cnt=unique(b+1,b+1+cnt)-b-2;for(int i=1;i<=cnt;i++){int l=b[i],r=b[i+1]-1;if(r-l>=n)Change(1,1,cnt,i,i,RMQ(0,n-1));else{l%=n;r%=n;if(l<=r)Change(1,1,cnt,i,i,RMQ(l,r));else Change(1,1,cnt,i,i,min(RMQ(0,r),RMQ(l,n-1)));}}for(int i=1;i<=m;i++){l[i]=lower_bound(b+1,b+2+cnt,l[i])-b;r[i]=lower_bound(b+1,b+2+cnt,r[i])-b-1;if(op[i]==1)Change(1,1,cnt,l[i],r[i],c[i]);else printf("%d\n",Ask(1,1,cnt,l[i],r[i]));}return 0;
}

CF803G-Periodic RMQ Problem【离散化,线段树,ST表】相关推荐

  1. 19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记

    19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 ...

  2. 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)

    题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...

  3. HDU - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?! 莫队/单调栈 + 线段树/ST表在线

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑将贡献分开来算,先计算最大值,再算个最小值,之后答案就是((max+min)/2)/(len∗(len+1)/2)((max+min)/2)/(l ...

  4. luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分...

    仰望半月的夜空 题解 可以的话,支持一下原作吧... 这道题数据很弱..... 因此各种乱搞估计都是能过的.... 算法一 暴力长度然后判断判断,复杂度\(O(n^3)\) 期望得分15分 算法二 通 ...

  5. Zoning Houses Kattis 多组记录线段树/ST表

    1.题意:给你n个平面上的点,再给你m个询问,每个询问包括[ l, r ]内的点,让你求出包含这些点在内的最小正方形的边长,你可以忽略这些点内的一个点. 2.分析:如果不忽略点,我们只需要取这些点中的 ...

  6. AC日记——Periodic RMQ Problem codeforces 803G

    G - Periodic RMQ Problem 思路: 题目给一段序列,然后序列复制很多次: 维护序列很多次后的性质: 线段树动态开点: 来,上代码: #include <cstdio> ...

  7. poj/OpenJ_Bailian - 2528 离散化+线段树

    传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...

  8. 【luogu1816】忠(RMQ问题、线段树)

    题面 RMQ问题 题解 线段树 #include<iostream> #include<algorithm> using namespace std; const int ma ...

  9. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

最新文章

  1. 基于SSM的汽车销售管理系统
  2. java 文档注释不显示泛型_使用Swagger进行说明 - 使用泛型时无法生成文档资源模型...
  3. 深度学习的seq2seq模型——本质是LSTM,训练过程是使得所有样本的p(y1,...,yT‘|x1,...,xT)概率之和最大...
  4. vue一二级联动清空二级数据_【周一实用技巧】二级联动还不够,自动更新才最牛。Excel 2013利用数据验证条件制作一级、二级联动和自动更新下拉列表...
  5. laravel 队列queue
  6. 网络管理员所需要的知识结构和素质
  7. 虚拟机删除后服务器内存,卸载虚拟机后仍占内存
  8. DataGrid控件(可以实现不刷新增加删除等操作)
  9. 嵌套RecyclerView左右滑动替代自定义view
  10. JavaScript中数组交集的最简单代码
  11. Penn Treebank Tags做点小翻译 (下篇)
  12. SYN Flood攻击及防御方法 (转)
  13. radiogroup多选_【RadioGroup】实现单选并获得所选项值 | 学步园
  14. *printf()格式化串安全漏洞分析(上)
  15. eova开发几个低级问题
  16. 基于Renascence架构的SQL查询引擎设计
  17. taskmgr(任务管理器)无法出来的解决办法
  18. 回声状态网络(ESN)的公式推导及代码实现
  19. C语言图形颜色编程|颜色
  20. 锁定Mac电脑的8种方法

热门文章

  1. vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王
  2. 大数据、java、python、区块链、人工智能哪个发展前景更好?
  3. linux安装grpc占用空间大,grpc linux安装-Go语言中文社区
  4. spyder pyecharts不显示_我的显示器需要定时校色吗?
  5. html点击图片弹出大图特效代码,Jquery 点击图片在弹出层显示大图
  6. 使用Microsoft Word2016无法正常对Latex文本转换的踩坑和解决方法
  7. [计组]寄存器和存储器的区别
  8. [C++11]通过using定义基础类型和函数指针别名
  9. springboot 历史版本文档_乘风破浪,SpringBoot入门
  10. word List 42