c 网站开发框架,南京做网站公司地点,外贸网站优化推广,黄冈资讯正题
题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意
一个长度为nnn的序列aaa复制kkk份连接#xff0c;要求支持
区间赋值区间查询最小值 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] 解题思路
先把所有查询的连续区间边界离…正题
题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意
一个长度为nnn的序列aaa复制kkk份连接要求支持
区间赋值区间查询最小值
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(nlogn)O(n\log n)O(nlogn) code
#includecstdio
#includecstring
#includealgorithm
using namespace std;
const int N1e510,inf1e97;
int n,m,cnt,f[N][20],l[N],r[N],c[N],op[N];
int b[N1],w[N3],lazy[N3],lg[N];
int RMQ(int l,int r){if(lr)return inf;int zlg[r-l1];return min(f[l][z],f[r-(1z)1][z]);
}
void Downdata(int x){if(!lazy[x])return;w[x*2]lazy[x*2]lazy[x];w[x*21]lazy[x*21]lazy[x];lazy[x]0;return;
}
void Change(int x,int L,int R,int l,int r,int val){if(LlRr){lazy[x]w[x]val;return;}int mid(LR)1;Downdata(x);if(rmid)Change(x*2,L,mid,l,r,val);else if(lmid) Change(x*21,mid1,R,l,r,val);else Change(x*2,L,mid,l,mid,val),Change(x*21,mid1,R,mid1,r,val);w[x]min(w[x*2],w[x*21]);return;
}
int Ask(int x,int L,int R,int l,int r){if(LlRr)return w[x];int mid(LR)1;Downdata(x);if(rmid)return Ask(x*2,L,mid,l,r);if(lmid)return Ask(x*21,mid1,R,l,r);return min(Ask(x*2,L,mid,l,mid),Ask(x*21,mid1,R,mid1,r));
}
int main()
{scanf(%d%d,n,m);for(int i0;in;i)scanf(%d,f[i][0]);for(int i2;in;i)lg[i]lg[i1]1;for(int j1;(1j)n;j)for(int i0;i(1j)n;i)f[i][j]min(f[i][j-1],f[i(1j-1)][j-1]);scanf(%d,m);for(int i1;im;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(b1,b1cnt);cntunique(b1,b1cnt)-b-2;for(int i1;icnt;i){int lb[i],rb[i1]-1;if(r-ln)Change(1,1,cnt,i,i,RMQ(0,n-1));else{l%n;r%n;if(lr)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 i1;im;i){l[i]lower_bound(b1,b2cnt,l[i])-b;r[i]lower_bound(b1,b2cnt,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;
}