# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
260064 | 2020-08-09T07:39:28 Z | arnold518 | Swap (BOI16_swap) | C++14 | 1000 ms | 241520 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2e5; int N, A[MAXN+10]; vector<int> V[MAXN+10], D[MAXN+10]; vector<vector<int>> dp[MAXN+10]; int get(int now, int pp) { return lower_bound(V[now].begin(), V[now].end(), pp, greater<int>())-V[now].begin(); } void solve(int now, int pp) { if(now*2>N) { dp[now][pp].push_back(A[V[now][pp]]); return; } if(now*2+1>N) { if(A[V[now][pp]]>A[now*2]) { dp[now][pp].push_back(A[now*2]); dp[now][pp].push_back(A[V[now][pp]]); } else { dp[now][pp].push_back(A[V[now][pp]]); dp[now][pp].push_back(A[now*2]); } return; } if(A[V[now][pp]]<A[now*2] && A[V[now][pp]]<A[now*2+1]) { vector<int> &p=dp[now*2][0], &q=dp[now*2+1][0]; dp[now][pp].push_back(A[V[now][pp]]); for(int k=0, i=0, j=0; i<p.size() || j<q.size(); k++) { for(int t=0; t<(1<<k) && i<p.size(); t++, i++) dp[now][pp].push_back(p[i]); for(int t=0; t<(1<<k) && j<q.size(); t++, j++) dp[now][pp].push_back(q[j]); } return; } if(A[now*2]<A[V[now][pp]] && A[now*2]<A[now*2+1]) { vector<int> &p=dp[now*2][get(now*2, V[now][pp])], &q=dp[now*2+1][0]; dp[now][pp].push_back(A[now*2]); for(int k=0, i=0, j=0; i<p.size() || j<q.size(); k++) { for(int t=0; t<(1<<k) && i<p.size(); t++, i++) dp[now][pp].push_back(p[i]); for(int t=0; t<(1<<k) && j<q.size(); t++, j++) dp[now][pp].push_back(q[j]); } return; } if(A[now*2+1]<A[V[now][pp]] && A[now*2+1]<A[now*2]) { vector<int> &p1=dp[now*2][get(now*2, V[now][pp])], &q1=dp[now*2+1][1]; vector<int> &p2=dp[now*2][0], &q2=dp[now*2+1][get(now*2+1, V[now][pp])]; dp[now][pp].push_back(A[now*2+1]); int flag=0; for(int k=0, i=0, j=0; i<p1.size() || j<q1.size(); k++) { for(int t=0; t<(1<<k) && i<p1.size(); t++, i++) { if(flag==1) dp[now][pp].push_back(p1[i]); if(flag==2) dp[now][pp].push_back(p2[i]); if(flag==0) { if(p1[i]==p2[i]) dp[now][pp].push_back(p1[i]), flag=0; if(p1[i]<p2[i]) dp[now][pp].push_back(p1[i]), flag=1; if(p1[i]>p2[i]) dp[now][pp].push_back(p2[i]), flag=2; } } for(int t=0; t<(1<<k) && j<q1.size(); t++, j++) { if(flag==1) dp[now][pp].push_back(q1[j]); if(flag==2) dp[now][pp].push_back(q2[j]); if(flag==0) { if(q1[j]==q2[j]) dp[now][pp].push_back(q1[j]), flag=0; if(q1[j]<q2[j]) dp[now][pp].push_back(q1[j]), flag=1; if(q1[j]>q2[j]) dp[now][pp].push_back(q2[j]), flag=2; } } } return; } } int main() { scanf("%d", &N); for(int i=1; i<=N; i++) scanf("%d", &A[i]); for(int i=1; i<=N; i++) { int now=i; while(now!=1) { V[i].push_back(now); if(now%2) V[i].push_back(now-1); now/=2; } V[i].push_back(1); dp[i].resize(V[i].size()); } int p=0; for(int i=1; i<=N; i++) { if(__builtin_popcount(i)==1) p++; D[p].push_back(i); } for(int now=N, p=N; now>=1; now--) { for(; p>now*2+1; p--) { for(auto &it : dp[p]) { it.clear(); it.shrink_to_fit(); } dp[p].clear(); dp[p].shrink_to_fit(); } for(int pp=0; pp<V[now].size(); pp++) { solve(now, pp); } } for(auto it : dp[1][0]) printf("%d ", it); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 14464 KB | Output is correct |
2 | Correct | 9 ms | 14464 KB | Output is correct |
3 | Correct | 9 ms | 14464 KB | Output is correct |
4 | Correct | 9 ms | 14464 KB | Output is correct |
5 | Correct | 9 ms | 14464 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 14464 KB | Output is correct |
2 | Correct | 9 ms | 14464 KB | Output is correct |
3 | Correct | 9 ms | 14464 KB | Output is correct |
4 | Correct | 9 ms | 14464 KB | Output is correct |
5 | Correct | 9 ms | 14464 KB | Output is correct |
6 | Correct | 9 ms | 14464 KB | Output is correct |
7 | Correct | 9 ms | 14464 KB | Output is correct |
8 | Correct | 10 ms | 14464 KB | Output is correct |
9 | Correct | 12 ms | 14464 KB | Output is correct |
10 | Correct | 9 ms | 14464 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 14464 KB | Output is correct |
2 | Correct | 9 ms | 14464 KB | Output is correct |
3 | Correct | 9 ms | 14464 KB | Output is correct |
4 | Correct | 9 ms | 14464 KB | Output is correct |
5 | Correct | 9 ms | 14464 KB | Output is correct |
6 | Correct | 9 ms | 14464 KB | Output is correct |
7 | Correct | 9 ms | 14464 KB | Output is correct |
8 | Correct | 10 ms | 14464 KB | Output is correct |
9 | Correct | 12 ms | 14464 KB | Output is correct |
10 | Correct | 9 ms | 14464 KB | Output is correct |
11 | Correct | 12 ms | 15008 KB | Output is correct |
12 | Correct | 12 ms | 15104 KB | Output is correct |
13 | Correct | 12 ms | 15104 KB | Output is correct |
14 | Correct | 16 ms | 15104 KB | Output is correct |
15 | Correct | 12 ms | 15104 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 14464 KB | Output is correct |
2 | Correct | 9 ms | 14464 KB | Output is correct |
3 | Correct | 9 ms | 14464 KB | Output is correct |
4 | Correct | 9 ms | 14464 KB | Output is correct |
5 | Correct | 9 ms | 14464 KB | Output is correct |
6 | Correct | 9 ms | 14464 KB | Output is correct |
7 | Correct | 9 ms | 14464 KB | Output is correct |
8 | Correct | 10 ms | 14464 KB | Output is correct |
9 | Correct | 12 ms | 14464 KB | Output is correct |
10 | Correct | 9 ms | 14464 KB | Output is correct |
11 | Correct | 12 ms | 15008 KB | Output is correct |
12 | Correct | 12 ms | 15104 KB | Output is correct |
13 | Correct | 12 ms | 15104 KB | Output is correct |
14 | Correct | 16 ms | 15104 KB | Output is correct |
15 | Correct | 12 ms | 15104 KB | Output is correct |
16 | Correct | 314 ms | 65336 KB | Output is correct |
17 | Correct | 311 ms | 65144 KB | Output is correct |
18 | Correct | 301 ms | 65144 KB | Output is correct |
19 | Correct | 314 ms | 65144 KB | Output is correct |
20 | Correct | 311 ms | 65280 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 14464 KB | Output is correct |
2 | Correct | 9 ms | 14464 KB | Output is correct |
3 | Correct | 9 ms | 14464 KB | Output is correct |
4 | Correct | 9 ms | 14464 KB | Output is correct |
5 | Correct | 9 ms | 14464 KB | Output is correct |
6 | Correct | 9 ms | 14464 KB | Output is correct |
7 | Correct | 9 ms | 14464 KB | Output is correct |
8 | Correct | 10 ms | 14464 KB | Output is correct |
9 | Correct | 12 ms | 14464 KB | Output is correct |
10 | Correct | 9 ms | 14464 KB | Output is correct |
11 | Correct | 12 ms | 15008 KB | Output is correct |
12 | Correct | 12 ms | 15104 KB | Output is correct |
13 | Correct | 12 ms | 15104 KB | Output is correct |
14 | Correct | 16 ms | 15104 KB | Output is correct |
15 | Correct | 12 ms | 15104 KB | Output is correct |
16 | Correct | 314 ms | 65336 KB | Output is correct |
17 | Correct | 311 ms | 65144 KB | Output is correct |
18 | Correct | 301 ms | 65144 KB | Output is correct |
19 | Correct | 314 ms | 65144 KB | Output is correct |
20 | Correct | 311 ms | 65280 KB | Output is correct |
21 | Execution timed out | 1104 ms | 241520 KB | Time limit exceeded |
22 | Halted | 0 ms | 0 KB | - |