QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#785884 | #962. Thanks to MikeMirzayanov | DaiRuiChen007 | WA | 0ms | 3544kb | C++17 | 1.6kb | 2024-11-26 19:32:01 | 2024-11-26 19:32:02 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef vector <int> vi;
const int MAXN=2e4+5;
vector<vi> qry(vi a) {
int n=a.size();
vector <vi> op;
while(true) {
vi len;
for(int i=0,j;i<n;i=j) {
for(j=i;j<n&&a[i]==a[j];++j);
len.push_back(j-i);
}
int tp=len.size();
if(tp==1||(tp==2&&!a[0])) break;
vi cur;
if(tp%3==2) {
for(int i=0;i+2<tp;i+=3) {
cur.push_back(len[i]+len[i+1]);
cur.push_back(len[i+2]);
}
cur.push_back(len[tp-2]+len[tp-1]);
} else {
for(int i=0;i+2<tp;i+=3) {
cur.push_back(len[i]);
cur.push_back(len[i+1]+len[i+2]);
}
if(tp%3==1) cur.push_back(len[tp-1]);
}
auto it=a.begin();
for(int i:cur) reverse(it,it+i),it+=i;
op.push_back(cur);
}
return op;
}
int n,a[MAXN];
vector <vi> ans;
signed main() {
ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;++i) cin>>a[i],--a[i];
for(int k=14;~k;--k) {
if(n<=(1<<k)) continue;
vector <vi> op;
for(int l=0,r;l<n;l=r+1) {
r=min(n-1,l+(1<<(k+1))-1);
vi b;
for(int i=l;i<=r;++i) b.push_back(a[i]>>k&1);
vector <vi> s=qry(b);
while(op.size()<s.size()) op.push_back(vi(l,1));
while(s.size()<op.size()) s.push_back(vi(r-l+1,1));
for(int i=0;i<(int)op.size();++i) for(int x:s[i]) op[i].push_back(x);
}
for(auto &it:op) {
int i=0;
for(int x:it) reverse(a+i,a+i+x),i+=x;
ans.push_back(it);
}
}
if(ans.size()&1) ans.push_back(vi(n,1));
cout<<ans.size()<<"\n";
for(int i=0;i<(int)ans.size();++i) {
vi &v=ans[i];
if(i&1) reverse(v.begin(),v.end());
cout<<v.size()<<" "; for(int x:v) cout<<x<<" "; cout<<"\n";
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3544kb
input:
4 3 1 2 4
output:
4 2 1 3 1 4 3 1 1 2 4 1 1 1 1
result:
wrong answer Integer 1 violates the range [2, 4]