社区讨论
暴力写挂,找了半小时
CF896CWillem, Chtholly and Seniorious参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo1ssomv
- 此快照首次捕获于
- 2023/10/23 02:24 2 年前
- 此快照最后确认于
- 2023/11/03 03:00 2 年前
code:
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+5,mod=1e9+7;
ll seed,vmax;
inline ll rnd(){
ll ret=seed;
seed=(seed*7+13)%mod;
return ret;
}
ll n,m,a[N];
ll ksm(ll x,ll y,ll p){
ll sum=1;
for(;y;y>>=1){
if(y&1)sum=sum*x%p;
x=x*x%p;
}
return sum;
}
/*struct node{
ll l,r;
mutable ll v;
node(ll l,ll r=0,ll v=0):l(l),r(r),v(v){}
inline bool operator < (const node x)const{
return l<x.l;
}
};
set<node>s;
auto split(ll p){
auto it=s.lower_bound(node(p));
if(it!=s.end()&&it->l==p)return it;
--it;
if(it->r<p)return s.end();
ll l=it->l,r=it->r,v=it->v;
s.erase(it);
s.insert(node(l,p-1,v));
return s.insert(node(p,r,v)).first;
}
void add(ll l,ll r,ll x){
auto itr=split(r+1),itl=split(l);
for(auto it=itl;it!=itr;++it)it->v+=x;
}
void change(ll l,ll r,ll x){
auto itr=split(r+1),itl=split(l);
s.erase(itl,itr);
s.insert(node(l,r,x));
}
ll rnk(ll l,ll r,ll x){
auto itr=split(r+1),itl=split(l);
vector<pair<ll,ll> >b;
for(auto it=itl;it!=itr;++it)
b.push_back({it->v,it->r-it->l+1});
sort(b.begin(),b.end());
for(ll i=0;i<b.size();++i){
if(b[i].second<x)
x-=b[i].second;
else return b[i].first;
}
}
ll query(ll l,ll r,ll x,ll y){
auto itr=split(r+1),itl=split(l);
ll ans=0;
for(auto it=itl;it!=itr;++it)
ans=(ans+ksm(it->v,x,y)*(it->r-it->l+1)%y)%y;
return ans;
}*/
int main(){
cin>>n>>m>>seed>>vmax;
for(ll i=1;i<=n;++i){
a[i]=rnd()%vmax+1;
// s.insert(node(i,i,a[i]));
}
for(ll op,l,r,x,y,i=1;i<=m;++i){
op=rnd()%4+1;
l=rnd()%n+1;
r=rnd()%n+1;
if(l>r)swap(l,r);
if(op==3)x=rnd()%(r-l+1)+1;
else x=rnd()%vmax+1;
if(op==4)y=rnd()%vmax+1;
/*if(op==1)add(l,r,x);
else if(op==2)change(l,r,x);
else if(op==3)printf("%lld\n",rnk(l,r,x));
else printf("%lld\n",query(l,r,x,y));*/
if(op==1){
for(int i=l;i<=r;++i)
a[i]+=x;
}
else if(op==2){
fill(a+l,a+r+1,x);
}
else if(op==3){
vector<ll>c;
for(int i=l;i<=r;++i)
c.push_back(a[i]);
sort(c.begin(),c.end());
printf("%lld\n",c[x-1]);
}
else{
ll ans=0;
for(int i=l;i<=r;++i)
ans=(ans+ksm(a[i],x,y))%y;
printf("%lld\n",ans);
}
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...