动态开点线段树求调
  • 板块学术版
  • 楼主xwh_Marvelous
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/12/12 19:12
  • 上次更新2023/10/24 07:52:09
查看原帖
动态开点线段树求调
614527
xwh_Marvelous楼主2022/12/12 19:12

CF803G

#include<bits/stdc++.h>
using namespace std;
int b[100005],k[100005][30],lg[100005];
int n,m,g;
#define s lg[r-l+1]
int oper(int l,int r){return min(k[l][s],k[r-(1<<s)+1][s]);}
#undef s
struct SegTree{
	#define lson ls[x]
	#define rson rs[x]
	#define mid ((l+r)>>1)
	int tot;
	int d[10000005],mark[10000005],ls[10000005],rs[10000005];
	int get(int x,int l,int r){int L=(l-1)%n+1,R=(r-1)%n+1;return x?d[x]:r-l+1>=n?oper(1,n):R>=L?oper(L,R):min(oper(1,R),oper(L,n));}
	void insert(int &x,int l,int r){if(!x)d[++tot]=get(x,l,r),x=tot;}
	void pushup(int x,int l,int r){d[x]=min(get(lson,l,mid),get(rson,mid+1,r));}
	void pushdown(int x,int l,int r){
		if(!mark[x])return;
		insert(rson,mid+1,r),insert(lson,l,mid);
		d[x]=mark[lson]=mark[rson]=mark[x];
		mark[x]=0;
	}
	void upd(int &x,int l,int r,int L,int R,int k){
		insert(x,l,r);pushdown(x,l,r);
		if(L<=l&&r<=R){mark[x]=k,pushdown(x,l,r);return;}
		if(mid>=L)upd(lson,l,mid,L,R,k);
		if(R>mid)upd(rson,mid+1,r,L,R,k);
		pushup(x,l,r);
	}
	int query(int &x,int l,int r,int L,int R){
		int ans=INT_MAX;
		insert(x,l,r);
		pushdown(x,l,r);
		if(L<=l&&r<=R)return get(x,l,r);
		if(mid>=L)ans=min(ans,query(lson,l,mid,L,R));
		if(R>mid)ans=min(ans,query(rson,mid+1,r,L,R));
		return ans;
	}
	#undef lson
	#undef rson
	#undef mid
}a;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
	for(int i=1;i<=n;i++)scanf("%d",&b[i]),k[i][0]=b[i];
	for(int j=1;j<=lg[n];j++){
		for(int i=1;i<=n;i++){
			k[i][j]=min(k[i][j-1],k[i+(1<<(j-1))][j-1]);
		}
	}
	int t;
	scanf("%d",&t);
	while(t--){
		int op,l,r,x;
		scanf("%d",&op);
		if(op==1){
			scanf("%d%d%d",&l,&r,&x);
			a.upd(g,1,n*m,l,r,x);
			// cout<<a.query(g,1,n*m,1,1)<<' '<<a.get(0,3,3)<<' '<<oper(3,3)<<endl;
			// a.pushup(1,1,3);
		}else{
			scanf("%d%d",&l,&r);
			printf("%d\n",a.query(g,1,n*m,l,r));
		}
	}
	return 0;
}

样例过了,WA on test 3

2022/12/12 19:12
加载中...