QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#414213 | #962. Thanks to MikeMirzayanov | Naganohara_Yoimiya | WA | 1ms | 3780kb | C++14 | 3.0kb | 2024-05-18 17:23:39 | 2024-05-18 17:23:39 |
Judging History
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]