WA on test#3,ODT求条qwq
查看原帖
WA on test#3,ODT求条qwq
764676
ycr_sad楼主2023/10/19 20:54
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#define int long long
using namespace std;
struct intt
{
	int l,r;
	mutable int v;
	bool operator < (const intt &x) const
	{
		return l<x.l;
	}
	intt(int L,int R,int V)
	{
		l=L;
		r=R;
		v=V;
	}
};
set<intt> tree;
int n,m,seed,vmax;
auto split(int op)
{
	auto it=tree.lower_bound(intt(op,0,0));
	if(it!=tree.end()&&it->l==op)
	  return it;
	--it;
	if(it->r<op)
	  return tree.end();
	int l=it->l;
	int r=it->r;
	int v=it->v;
	tree.erase(it);
	tree.insert(intt(l,op-1,v));
	return tree.insert(intt(op,r,v)).first;
}
void tp(int l,int r,int k)
{
	auto ir=split(r+1),il=split(l);
	tree.erase(il,ir);
	tree.insert(intt(l,r,k));
}
void add(int l,int r,int k)
{
	auto ir=split(r+1),il=split(l);
	for(;il!=ir;il++)
	  il->v+=k;
}
void q1(int l,int r,int k)
{
	vector<pair<int,int>> qwq;
	auto ir=split(r+1),il=split(l);
	for(auto i=il;i!=ir;i++)
	  qwq.push_back(make_pair(i->v,i->r-i->l+1));
	sort(qwq.begin(),qwq.end());
	for(auto i=qwq.begin();i!=qwq.end();i++)
	{
		k-=i->second;
		if(k<=0)
		{
		    cout<<i->first<<"\n";
		    return;
		}
	}
}
int qsm(int a,int x,int m)
{
	int ans=1%m;
	a%=m;
	while(x)
	{
		if(x&1)
		  ans*=a,ans%=m;
		a*=a;
		a%=m;
		x>>=1;
	}
	ans%=m;
	return ans;
}
void q2(int l,int r,int x,int y)
{
	int ans=0;
	auto ir=split(r+1),il=split(l);
	for(;il!=ir;il++)
	  ans+=qsm(il->v,x,y),ans%=y;
	ans%=y;
	cout<<ans<<"\n";
}
int rnd()
{
	int ret=seed;
	seed = (seed * 7 + 13) % 1000000007;
	return ret;
}
signed main()
{
	cin>>n>>m>>seed>>vmax;
	for(int i=1;i<=n;i++)
	{
		int qwp=(rnd() % vmax) + 1;
		tree.insert(intt(i,i,qwp));
	}
	for(int i=1;i<=m;i++)
	{
		int op,l,r,x,y;
		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);
        if(op==2)
          tp(l,r,x);
        if(op==3)
          q1(l,r,x);
        if(op==4)
          q2(l,r,x,y);
        
//        signed nb=1;
//        for(auto i=tree.begin();i!=tree.end();i++,nb++)
//          cout<<nb<<":"<<i->l<<" "<<i->r<<"\n";
	}
}

蒟蒻实在是不会惹qwq

2023/10/19 20:54
加载中...