RE on #58 求调
查看原帖
RE on #58 求调
790274
InQueue楼主2025/1/16 18:31

试了在各种地方 assert 也没找到

#pragma GCC optimize(3)
#pragma comment(linker,"/stack:200000000")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
#include<bits/stdc++.h>
#define psbk push_back
#define fst first
#define scd second
#define umap unordered_map
#define pqueue priority_queue
#define vc vector
#define all(v) v.begin(), v.end()
#define mem(a, x) memset(a, x, sizeof a)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
constexpr int inf = 0x3f3f3f3f;
namespace Fread{
const long long SIZE=1<<21;
	char buf[SIZE],*S,*T;
	inline char getchar(){
		if (S==T){
			T=(S=buf)+fread(buf,1,SIZE,stdin);
			if(S==T){
				return '\n';
			}
		}
		return *S++;
	}
}	
namespace Fwrite{
	const long long SIZE=1<<21;
	char buf[SIZE],*S=buf,*T=buf+SIZE;
	inline void flush(){
		fwrite(buf,1,S-buf,stdout);
		S=buf;
	}
	inline void putchar(char c){
		*S++=c;
		if(S==T){
			flush();
		}
	}
	struct NTR{
		~NTR(){
			flush();
		}
	}ztr;
} 
#ifdef ONLINE_JUDGE
#define getchar Fread::getchar
#define putchar Fwrite::putchar
#endif
namespace Fastio{
	struct Reader{
		template<typename T>
		Reader& operator>>(T& x){
			char c=getchar();
			T f=1;
			while (c<'0'||c>'9'){
				if (c=='-') f=-1;
				c=getchar();
			}
			x=0;
			while (c>='0'&&c<='9'){
				x=x*10+(c-'0');
				c=getchar();
			}
			x*=f;
			return *this;
		}
		Reader& operator>>(char& c){
			c=getchar();
			while (c==' '||c=='\n'){
				c=getchar();
			}
			return *this;
		}
		Reader& operator>>(char* str){
			long long len=0;
			char c=getchar();
			while (c==' '||c=='\n'){
				c=getchar();
			}
			while (c!=' '&&c!='\n'&&c!='\r'){ 
				str[len++]=c;
				c=getchar();
			}
			str[len]='\0';
			return *this;
		}
		Reader(){}
	}cin;
	const char endl='\n';
	struct Writer{
		template<typename T>
		Writer&operator<<(T x){
			if(x==0){
				putchar('0');
				return *this;
			}
			if(x<0){
				putchar('-');
				x=-x;
			}
			static long long sta[45];
			long long top=0;
			while(x){
				sta[++top]=x%10;
				x/=10;
			}
			while(top){
				putchar(sta[top]+'0');
				--top;
			}
			return *this;
		}
		Writer& operator<<(char c){
			putchar(c);
			return *this;
		}
		Writer& operator<<(char* str){
			long long cur=0;
			while(str[cur]){
				putchar(str[cur++]);
			}
			return *this;
		}
		Writer& operator<<(const char* str){
			long long cur=0;
			while(str[cur]){
				putchar(str[cur++]);
			}
			return *this;
		}
		Writer(){}
	}cout;
}
#define cin Fastio::cin
#define cout Fastio::cout
#define endl Fastio::endl
int n, a[100005], q, lstans, B, bel[100005], cnt[320][100005], bg[320];
deque<int> v[320];
signed main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	cin >> n;
	B = sqrt(n) + 1;
	for(int i=1;i<=n;i++)
	{
		cin >> a[i];
		bel[i] = (i + B - 1) / B;
		cnt[bel[i]][a[i]]++;
		if(bel[i] != bel[i - 1])
		{
			bg[bel[i]] = i;
		}
		v[bel[i]].psbk(a[i]);
	}
	cin >> q;
	while(q--)
	{
		int op, l, r, k;
		cin >> op >> l >> r;
		l = (l + lstans - 1 + n) % n + 1;
		r = (r + lstans - 1 + n) % n + 1;
		if(l > r)
		{
			swap(l, r);
		}
		if(op == 1)
		{
			if(bel[l] == bel[r])
			{
				int blk = bel[l];
				l -= bg[blk], r -= bg[blk];
				int rec = v[blk][r];
				v[blk].erase(v[blk].begin() + r);
				v[blk].insert(v[blk].begin() + l, rec);
			}
			else
			{
				int bl = bel[l], br = bel[r];
				for(int i=bl;i<br;i++)
				{
					int tmp = v[i].back();
					++cnt[i + 1][tmp];
					v[i + 1].push_front(tmp);
					--cnt[i][tmp];
					v[i].pop_back();
				}
				int pos = r - bg[br] + 1;
				int tmp = v[br][pos];
				++cnt[bl][tmp];
				v[bl].insert(v[bl].begin() + l - bg[bl], tmp);
				--cnt[br][tmp];
				v[br].erase(v[br].begin() + pos);
			}
		}
		else
		{
			cin >> k;
			k = (k + lstans - 1 + n) % n + 1;
			if(bel[l] == bel[r])
			{
				int blk = bel[l];
				l -= bg[blk], r -= bg[blk];
				lstans = 0;
				for(int i=l;i<=r;++i)
				{
					lstans += (v[blk][i] == k);
				}
			}
			else
			{
				int bl = bel[l], br = bel[r];
				lstans = 0;
				for(int i=l-bg[bl];i<v[bl].size();++i)
				{
					lstans += (v[bl][i] == k);
				}
				for(int i=bl+1;i<br;++i)
				{
					lstans += cnt[i][k];
				}
				for(int i=0;i<=r-bg[br];++i)
				{
					lstans += (v[br][i] == k);
				}
			}
			cout << lstans << endl;
		}
	}
	return 0;
}
2025/1/16 18:31
加载中...