1 条题解
-
0
#include "swaps.h" #include <bits/stdc++.h> using namespace std; const int maxn=512; int n,B,to,ord[maxn]; vector<int> v; void add(int x,int y){ if(ord[x]>=n||ord[y]>=n){ if(ord[x]>ord[y]) swap(ord[x],ord[y]); return; } schedule(ord[x]+1,ord[y]+1); return; } void upd(int x,int y){ if(ord[x]<n&&ord[y]<n){ if(!v[to]) swap(ord[x],ord[y]); to++; } return; } void solve(int _n,int lim){ n=_n; for(B=1;B<n;B<<=1); for(int i=0;i<B;i++) ord[i]=i; for(int len=1;len<B;len<<=1){ for(int i=0;i<B;i+=(len<<1)) reverse(ord+i+len,ord+i+(len<<1)); for(int s=len;s;s>>=1){ for(int i=0;i<B;i+=(s<<1)){ for(int j=0;j<s;j++) add(i+j,i+j+s); } v=visit(),to=0; for(int i=0;i<B;i+=(s<<1)){ for(int j=0;j<s;j++) upd(i+j,i+j+s); } } } vector<int> ret; for(int i=0;i<n;i++) ret.push_back(ord[i]+1); answer(ret); return; }
- 1
信息
- ID
- 10569
- 时间
- 1500ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者