QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#461685#962. Thanks to MikeMirzayanovKevin5307WA 0ms3616kbC++232.7kb2024-07-02 22:41:282024-07-02 22:41:28

Judging History

This is the latest submission verdict.

  • [2024-07-02 22:41:28]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3616kb
  • [2024-07-02 22:41:28]
  • Submitted

answer

//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
int a[20020];
vector<vector<int>> ans;
int cop;
void op(vector<int> vec)
{
	cop++;
	if(sz(vec)==1) return ;
	ans.pb(vec);
	vector<vector<int>> tmp;
	int p=0;
	for(auto len:vec)
	{
		vector<int> seg;
		while(len--)
			seg.pb(a[++p]);
		tmp.pb(seg);
	}
	for(auto &arr:tmp)
		rev(arr);
	p=0;
	for(auto seg:tmp)
		for(auto x:seg)
			a[++p]=x;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	vector<pii> vrange;
	vrange.pb(1,n);
	while(true)
	{
		int mlen=0;
		for(auto pr:vrange)
			mlen=max(mlen,pr.second-pr.first+1);
		if(mlen==1) break;
		vector<int> vlen;
		bool finished=true;
		for(auto pr:vrange)
		{
			int mid=(pr.first+pr.second)/2;
			int len=0;
			int lst=-1;
			vector<int> clen;
			for(int i=pr.first;i<=pr.second;i++)
			{
				int st=(a[(cop&1)?(pr.first+pr.second-i):i]>mid);
				if(lst!=st)
				{
					if(len) clen.pb(len);
					len=1;
					lst=st;
				}
				else
					len++;
			}
			clen.pb(len);
			if(sz(clen)>2)
				finished=false;
			for(int i=0;i<sz(clen);i++)
			{
				if(i%4==1&&i+1<sz(clen))
				{
					vlen.pb(clen[i]+clen[i+1]);
					i++;
				}
				else
					vlen.pb(clen[i]);
			}
		}
		if(!finished)
			op(vlen);
		else
		{
			vector<int> nvlen;
			for(auto pr:vrange)
			{
				if(pr.first==pr.second)
				{
					nvlen.pb(1);
					continue;
				}
				int mid=(pr.first+pr.second)/2;
				if((a[pr.first]>mid)^(cop&1))
				{
					nvlen.pb(mid-pr.first+1);
					nvlen.pb(pr.second-mid);
				}
				else
					nvlen.pb(pr.second-pr.first+1);
			}
			op(nvlen);
			if(cop&1)
				op(vector<int>(n,1));
			vector<pii> nrange;
			for(auto pr:vrange)
			{
				int mid=(pr.first+pr.second)/2;
				if(pr.first==pr.second)
					nrange.pb(pr);
				else
				{
					nrange.pb(pr.first,mid);
					nrange.pb(mid+1,pr.second);
				}
			}
			vrange=nrange;
		}
	}
	cout<<sz(ans)<<'\n';
	for(auto arr:ans)
	{
		cout<<sz(arr)<<" ";
		for(auto x:arr)
			cout<<x<<" ";
		cout<<'\n';
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
3 1 2 4

output:

3
2 1 3 
3 1 1 2 
4 1 1 1 1 

result:

ok OK

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3592kb

input:

6
6 5 4 3 2 1

output:

6
2 3 3 
6 1 1 1 1 1 1 
3 2 1 3 
6 1 1 1 1 1 1 
5 1 1 1 2 1 
6 1 1 1 1 1 1 

result:

wrong answer the permutation is not sorted