比赛 2025.10.18 评测结果 WWWWWWWWWW
题目名称 Willem, Chtholly and Seniorious 最终得分 0
用户昵称 梦那边的美好RE 运行时间 4.060 s
代码语言 C++ 内存使用 8.06 MiB
提交时间 2025-10-18 11:14:49
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+7;
struct node{
	int l,r;
	mutable int val;
	node(int l,int r,int val) :l(l),r(r),val(val){};
	bool operator<(const  node &a)const{
		return l<a.l;
	} 
};
set<node>odt;
int n,m;
int qpow(int n,int k,int p){
	int ans=1;
    while(k){
        if(k&1){
            ans=ans*n%p;
        }
        n=n*n%p;
        k>>=1;
    }
    return ans;
}
auto split(int x){
	auto it=odt.lower_bound(node(x,-1,0));
	if(it!=odt.end()&&it->l==x){
		return it;
	}
	it--;
	int l=it->l,r=it->r,val=it->val;
	odt.erase(it);
	odt.insert(node(l,x-1,val));
	return odt.insert(node(x,r,val)).first; 
}
void assgin(int l,int r,int v){
	auto end=split(r+1),begin=split(l);
	odt.erase(begin,end);
	odt.insert(node(l,r,v));
}
void add(int l,int r,int v){
	auto end=split(r+1),begin=split(l);
	for(auto it=begin;it!=end;it++){
		it->val+=v;
	}
}
int ask_pow(int l,int r,int x,int p){
	auto end=split(r+1),begin=split(l);
	int ans=0;
	for(auto it=begin;it!=end;it++){
		int aa=it->val,ll=it->l,rr=it->r;
		ans=(ans+qpow(aa,x,p)*(rr-ll+1)%p)%p;
	}
	return ans;
}
int ask_k_th(int l,int r,int x){
	auto end=split(r+1),begin=split(l);
	vector<pair<int,int> >g;
	for(auto it=begin;it!=end;it++){
		int ll=it->l,rr=it->r;
		g.push_back(make_pair(it->val,rr-ll+1));
	}
	sort(g.begin(),g.end());
	for(int i=0;i<g.size();i++){
		x-=g[i].second;
		if(x<=0){
			return g[i].first;
		}
	}
}
signed main(){
	freopen("kdl.in","r",stdin);
	freopen("kdl.out","w",stdout); 
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int v;
		cin>>v;
		odt.insert(node(i,i,v));
	}
	for(int i=1;i<=m;i++){
		int op,l,r,x,y;
		cin>>op>>l>>r>>x;
		if(l>r){
			swap(l,r);
		}
		if(op==1){
			add(l,r,x);
		}
		else if(op==2){
			assgin(l,r,x);
		}
		else if(op==3){
			cout<<ask_k_th(l,r,x)<<"\n";
		}
		else if(op==4){
			cin>>y;
			cout<<ask_pow(l,r,x,y)<<"\n";
		}
	}
	
	return 0;
}