QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#414213#962. Thanks to MikeMirzayanovNaganohara_YoimiyaWA 1ms3780kbC++143.0kb2024-05-18 17:23:392024-05-18 17:23:39

Judging History

你现在查看的是最新测评结果

  • [2024-05-18 17:23:39]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3780kb
  • [2024-05-18 17:23:39]
  • 提交

answer

#include<bits/stdc++.h>

#define ll long long
#define mk make_pair
#define fi first
#define se second

using namespace std;

inline int read(){
	int x=0,f=1;char c=getchar();
	for(;(c<'0'||c>'9');c=getchar()){if(c=='-')f=-1;}
	for(;(c>='0'&&c<='9');c=getchar())x=x*10+(c&15);
	return x*f;
}

const int mod=998244353;
int ksm(int x,ll y,int p=mod){
	int ans=1;y%=(p-1);
	for(int i=y;i;i>>=1,x=1ll*x*x%p)if(i&1)ans=1ll*ans*x%p;
	return ans%p;
}
int inv(int x,int p=mod){return ksm(x,p-2,p)%p;}
mt19937 rnd(time(0));
int randint(int l,int r){return rnd()%(r-l+1)+l;}
void add(int &x,int v){x+=v;if(x>=mod)x-=mod;}
void Mod(int &x){if(x>=mod)x-=mod;}
int cmod(int x){if(x>=mod)x-=mod;return x;}

template<typename T>void cmax(T &x,T v){x=max(x,v);}
template<typename T>void cmin(T &x,T v){x=min(x,v);}

const int N=20005;
const int Q=205;
int n,p[N],ncnt=0;
vector<pair<int,int> >oper[Q];
vector<int>ans[Q];

void solve(int l,int r,int st){
	// cout<<"solve "<<l<<" "<<r<<" st = "<<st<<endl;
	if(l==r)return cmax(ncnt,st);
	vector<int>vals(r-l+1);
	for(int i=l;i<=r;i++)vals[i-l]=p[i];
	sort(vals.begin(),vals.end());int v=vals[(r-l)/2];

	// for(int i=l;i<=r;i++)cout<<p[i]<<" ";puts("");
	// cout<<"vals = ";for(int x:vals)cout<<x<<" ";puts("");

	// cout<<"v = "<<v<<endl;

	while(true){
		vector<int>lens;int now=0;
		for(int i=l;i<=r;i++){
			if(i==l||((p[i]<=v)==(p[i-1]<=v)))now++;
			else lens.emplace_back(now),now=1;
		}
		lens.emplace_back(now);

		// cout<<" now p = ";for(int i=l;i<=r;i++)cout<<(p[i]<=v);puts("");

		if(lens.size()==2){
			if(p[l]>v)oper[++st].emplace_back(mk(l,r)),reverse(p+l,p+r+1);
			// cout<<" now p = ";for(int i=l;i<=r;i++)cout<<(p[i]<=v);puts("");
			// cout<<" now p = ";for(int i=l;i<=r;i++)cout<<p[i]<<" ";puts("");
			break;
		}

		// cout<<" lens = ";for(int x:lens)cout<<x<<" ";puts("");

		int nl=l;++st;
		for(int i=0;i<lens.size();i++){
			if(i%4==0&&i+1<lens.size()){
				int nr=nl+lens[i]+lens[i+1]-1;
				oper[st].emplace_back(mk(nl,nr)),reverse(p+nl,p+nr+1);
				nl=nr+1,i++;
			}
			else{
				int nr=nl+lens[i]-1;
				oper[st].emplace_back(mk(nl,nr)),reverse(p+nl,p+nr+1);
				nl=nr+1;
			}
		}
	}

	// exit(0);

	int mid=(l+r)>>1;
	solve(l,mid,st),solve(mid+1,r,st);
}

signed main(void){

#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
#endif

	n=read();
	for(int i=1;i<=n;i++)p[i]=read();
	solve(1,n,0);

	// cout<<"oper = \n";
	// for(int i=1;i<=n;i++){
	// 	for(auto [l,r]:oper[i])cout<<"["<<l<<","<<r<<"] ";puts("");
	// }
	
	for(int i=1;i<=ncnt;i++){
		int pre=0;
		for(auto [l,r]:oper[i]){
			for(int j=pre+1;j<=l-1;j++)ans[i].emplace_back(1);
			ans[i].emplace_back(r-l+1);pre=r;
		}
		for(int j=pre+1;j<=n;j++)ans[i].emplace_back(1);
	}

	for(int i=1;i<=ncnt;i++)if(i%2==0)reverse(ans[i].begin(),ans[i].end());
	if(ncnt%2==1)ans[++ncnt].emplace_back(n);

	cout<<ncnt<<endl;
	for(int i=1;i<=ncnt;i++){
		cout<<ans[i].size()<<" ";for(int j:ans[i])cout<<j<<" ";puts("");
	}

	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3780kb

input:

4
3 1 2 4

output:

2
2 3 1 
3 1 1 2 

result:

ok OK

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3648kb

input:

6
6 5 4 3 2 1

output:

2
1 6 
1 6 

result:

wrong answer Integer 1 violates the range [2, 6]