比赛 2025.10.18 评测结果 WWWTTTTTTT
题目名称 Willem, Chtholly and Seniorious 最终得分 0
用户昵称 李奇文 运行时间 28.509 s
代码语言 C++ 内存使用 10.27 MiB
提交时间 2025-10-18 10:53:03
显示代码纯文本
/*#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,m,ans,a[N];
struct node{
	int l,r,v;
}t[2*N];
struct hs{
	int v,s;
};
vector<hs>q;
void pushdown(int p){
	if(t[p].v){
		t[p<<1].v=t[p<<1|1].v=t[p].v;
		t[p].v=0;
	}
}
void build(int p,int l,int r){
	t[p].l=l,t[p].r=r;
	if(l==r){
		t[p].v=a[l];
		return;
	}
	int mid=((l+r)>>1);
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	return;
}
void increase(int p,int l,int r,int x){
	if(r<t[p].l||t[p].r<l) return;
	if(l<=t[p].l&&t[p].r<=r&&t[p].v){
		t[p].v+=x;
		return;
	}
	pushdown(p);
	increase(p<<1,l,r,x);
	increase(p<<1|1,l,r,x);
}
void cover(int p,int l,int r,int x){
	if(r<t[p].l||t[p].r<l) return;
	if(l<=t[p].l&&t[p].r<=r){
		t[p].v=x;
		return;
	}
	pushdown(p);
	cover(p<<1,l,r,x);
	cover(p<<1|1,l,r,x);
}
void query(int p,int l,int r){
	if(r<t[p].l||t[p].r<l) return;
	if(t[p].v){
		q.push_back({t[p].v,min(t[p].r,r)-max(t[p].l,l)+1});
		return;
	}
	query(p<<1,l,r);
	query(p<<1|1,l,r);
}
long long ksm(long long a,long long b,long long mod){
	if(!b) return 1ll;
	long long c=ksm(a,b>>1,mod);
	c=c*c%mod;
	if(b&1) c=c*a%mod;
	return c;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	build(1,1,n);
	while(m--){
		int opt,l,r,x,y;
		cin>>opt>>l>>r>>x;
		if(l>r)swap(l,r);
		if(opt==1){
			increase(1,l,r,x);
		}else if(opt==2){
			cover(1,l,r,x);
		}else if(opt==3){
			q.clear();
			query(1,l,r);
			sort(q.begin(),q.end(),[](hs a,hs b){return a.v<b.v;});
			for(hs i:q){
				if(x<=i.s){
					cout<<i.v<<"\n";
					break;
				}else{
					x-=i.s;
				}
			}
		}else{
			ans=0;
			cin>>y;
			q.clear();
			query(1,l,r);
			for(hs i:q){
				ans=(ans+i.s*ksm(i.v,x,y))%y;
			} 
			cout<<ans<<"\n";
		}
	}
	return 0;
}*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5,inf=1e9+7;
int n,m,cnt,a[N],f[N];
struct node{
	int l,r,s,val,key;
	int lzinc,lzcov,cov,inc;
}t[2*N];
int rt,idx;
int newcode(int v){
	idx++;
	t[idx].l=t[idx].r=t[idx].lzinc=t[idx].lzcov=0;
	t[idx].cov=t[idx].inc=0;
	t[idx].s=1;
	t[idx].val=v;
	t[idx].key=rand();
	return idx;
}
void cover(int p,int k){
	t[p].val=t[p].cov=k;
	t[p].lzcov=1;
}
void increase(int p,int k){
	t[p].val+=k;
	t[p].inc+=k;
	t[p].lzinc=1;
}
void pushup(int p){
	if(!p) return;
	t[p].s=t[t[p].l].s+t[t[p].r].s+1;
}
void pushdown(int p){
	if(!p) return;
	if(t[p].lzcov){
		if(t[p].l) cover(t[p].l,t[p].cov);
		if(t[p].r) cover(t[p].r,t[p].cov);
		t[p].cov=t[p].lzcov=0;
	}
	if(t[p].lzinc){
		if(t[p].l) increase(t[p].l,t[p].inc);
		if(t[p].r) increase(t[p].r,t[p].inc);
		t[p].inc=t[p].lzinc=0;
	}
	return;
}
void split(int x,int &l,int &r,int k){
	if(x) pushdown(x);
	if(!x){
		l=r=0;
		return;
	}
	if(t[t[x].l].s+1<=k){
		l=x;
		split(t[x].r,t[l].r,r,k-t[t[x].l].s-1);
	}else{
		r=x;
		split(t[x].l,l,t[r].l,k);
	}
	pushup(x);
}
void merge(int x,int y,int &k){
	if(!x||!y){
		k=x+y;
		return;
	}
	if(t[x].key<t[y].key){
		pushdown(x);
		k=x;
		merge(t[x].r,y,t[x].r);
		pushup(x);
	}else{
		pushdown(y);
		k=y;
		merge(x,t[y].l,t[y].l);
		pushup(y);
	}
}
int build(int l,int r){
	if(l==r){
		return newcode(a[l]);
	}
	int x,mid=((l+r)>>1);
	merge(build(l,mid),build(mid+1,r),x);
	return x;
}
long long ksm(long long a,long long b,long long mod){
	if(!b) return 1ll;
	long long c=ksm(a,b>>1,mod);
	c=c*c%mod;
	if(b&1) c=c*a%mod;
	return c;
}
unsigned long long ans=0;
void getarr(int p){
	if(p==0){
		return;	
	}
	pushdown(p);
	getarr(t[p].l);
	f[++cnt]=t[p].val;
	getarr(t[p].r);
	return;
}
signed main(){
	freopen("kdl.in","r",stdin);
	freopen("kdl.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	srand(time(0));
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	merge(rt,build(1,n),rt);
	while(m--){
		int opt,l,r,x;
		cin>>opt>>l>>r>>x;
		if(l>r) swap(l,r);
		cnt=0;ans=0;
		memset(f,0,sizeof(f));
		if(opt==2){
			int _x,_y,_z;
			split(rt,_x,_y,l-1);
			split(_y,_y,_z,r-l+1);
			cover(_y,x);
			merge(_x,_y,_x);
			merge(_x,_z,rt);
		}else if(opt==1){
			int _x,_y,_z;
			split(rt,_x,_y,l-1);
			split(_y,_y,_z,r-l+1);
			increase(_y,x);
			merge(_x,_y,_x);
			merge(_x,_z,rt);
		}else if(opt==3){
			int _x,_y,_z;
			split(rt,_x,_y,l-1);
			split(_y,_y,_z,r-l+1);
			getarr(_y);
			sort(f+1,f+2+r-l);
			cout<<f[x]<<"\n";
			merge(_x,_y,_x);
			merge(_x,_z,rt);
		}else if(opt==4){
			long long y;
			cin>>y;
			getarr(rt);
			long long ans=0;
			for(int i=l;i<=r;i++){
				ans+=ksm(f[i],x,y);
			}
			cout<<ans%y<<"\n";
		}
	}
	return 0;
}