#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
#define all(v) begin(v), end(v)
#define sz(v) (int)(v).size()
#define fi first
#define se second
const int N = 4e5 + 3;
map<int, vi> dp[N];
int a[N], n, nn;
vi merge(vi& p, vi& q) {
vi r; r.reserve(sz(p)+sz(q));
int pw = 1;
int i = 0, j = 0;
while(i < sz(p) or j < sz(q)) {
r.insert(r.end(), p.begin()+i, p.begin()+min(sz(p), i+pw));
r.insert(r.end(), q.begin()+j, q.begin()+min(sz(q), j+pw));
i = min(i+pw, sz(p));
j = min(j+pw, sz(q));
pw *= 2;
}
return r;
}
vi& f(int u, int k) {
if(sz(dp[u][k])) return dp[u][k];
vi& ret = dp[u][k];
if(2*u > nn) return ret = {k};
{ // don't use any edge
vi& l = f(2*u, a[2*u]);
vi& r = f(2*u+1, a[2*u+1]);
ret = merge(l, r);
ret.insert(ret.begin(), k);
}
{ // use only left edge
vi& l = f(2*u, k);
vi& r = f(2*u+1, a[2*u+1]);
vi tmp = merge(l, r);
tmp.insert(tmp.begin(), a[2*u]);
ret = min(ret, tmp);
}
{ // use only right edge
vi& l = f(2*u, a[2*u]);
vi& r = f(2*u+1, k);
vi tmp = merge(l, r);
tmp.insert(tmp.begin(), a[2*u+1]);
ret = min(ret, tmp);
}
{ // use both edges
vi& l = f(2*u, k);
vi& r = f(2*u+1, a[2*u]);
vi tmp = merge(l, r);
tmp.insert(tmp.begin(), a[2*u+1]);
ret = min(ret, tmp);
}
return ret;
}
int main(int argc, char* argv[]) {
cin.sync_with_stdio(0); cin.tie(0);
cin.exceptions(cin.failbit);
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
cin >> n;
nn = 1;
while(nn-1 < n) nn *= 2;
nn--;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = n+1; i <= nn; ++i)
a[i] = n+1;
vi ans = f(1, a[1]);
for(int i = 0; i < n; ++i)
cout << ans[i] << ' ';
cout << endl;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
19180 KB |
Output is correct |
2 |
Correct |
13 ms |
19180 KB |
Output is correct |
3 |
Correct |
13 ms |
19180 KB |
Output is correct |
4 |
Correct |
13 ms |
19180 KB |
Output is correct |
5 |
Correct |
13 ms |
19180 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
19180 KB |
Output is correct |
2 |
Correct |
13 ms |
19180 KB |
Output is correct |
3 |
Correct |
13 ms |
19180 KB |
Output is correct |
4 |
Correct |
13 ms |
19180 KB |
Output is correct |
5 |
Correct |
13 ms |
19180 KB |
Output is correct |
6 |
Correct |
15 ms |
19184 KB |
Output is correct |
7 |
Correct |
13 ms |
19180 KB |
Output is correct |
8 |
Correct |
13 ms |
19180 KB |
Output is correct |
9 |
Correct |
14 ms |
19308 KB |
Output is correct |
10 |
Correct |
13 ms |
19180 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
19180 KB |
Output is correct |
2 |
Correct |
13 ms |
19180 KB |
Output is correct |
3 |
Correct |
13 ms |
19180 KB |
Output is correct |
4 |
Correct |
13 ms |
19180 KB |
Output is correct |
5 |
Correct |
13 ms |
19180 KB |
Output is correct |
6 |
Correct |
15 ms |
19184 KB |
Output is correct |
7 |
Correct |
13 ms |
19180 KB |
Output is correct |
8 |
Correct |
13 ms |
19180 KB |
Output is correct |
9 |
Correct |
14 ms |
19308 KB |
Output is correct |
10 |
Correct |
13 ms |
19180 KB |
Output is correct |
11 |
Correct |
22 ms |
20972 KB |
Output is correct |
12 |
Correct |
22 ms |
20972 KB |
Output is correct |
13 |
Correct |
21 ms |
20972 KB |
Output is correct |
14 |
Correct |
21 ms |
20972 KB |
Output is correct |
15 |
Correct |
22 ms |
20972 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
19180 KB |
Output is correct |
2 |
Correct |
13 ms |
19180 KB |
Output is correct |
3 |
Correct |
13 ms |
19180 KB |
Output is correct |
4 |
Correct |
13 ms |
19180 KB |
Output is correct |
5 |
Correct |
13 ms |
19180 KB |
Output is correct |
6 |
Correct |
15 ms |
19184 KB |
Output is correct |
7 |
Correct |
13 ms |
19180 KB |
Output is correct |
8 |
Correct |
13 ms |
19180 KB |
Output is correct |
9 |
Correct |
14 ms |
19308 KB |
Output is correct |
10 |
Correct |
13 ms |
19180 KB |
Output is correct |
11 |
Correct |
22 ms |
20972 KB |
Output is correct |
12 |
Correct |
22 ms |
20972 KB |
Output is correct |
13 |
Correct |
21 ms |
20972 KB |
Output is correct |
14 |
Correct |
21 ms |
20972 KB |
Output is correct |
15 |
Correct |
22 ms |
20972 KB |
Output is correct |
16 |
Execution timed out |
1104 ms |
242700 KB |
Time limit exceeded |
17 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
19180 KB |
Output is correct |
2 |
Correct |
13 ms |
19180 KB |
Output is correct |
3 |
Correct |
13 ms |
19180 KB |
Output is correct |
4 |
Correct |
13 ms |
19180 KB |
Output is correct |
5 |
Correct |
13 ms |
19180 KB |
Output is correct |
6 |
Correct |
15 ms |
19184 KB |
Output is correct |
7 |
Correct |
13 ms |
19180 KB |
Output is correct |
8 |
Correct |
13 ms |
19180 KB |
Output is correct |
9 |
Correct |
14 ms |
19308 KB |
Output is correct |
10 |
Correct |
13 ms |
19180 KB |
Output is correct |
11 |
Correct |
22 ms |
20972 KB |
Output is correct |
12 |
Correct |
22 ms |
20972 KB |
Output is correct |
13 |
Correct |
21 ms |
20972 KB |
Output is correct |
14 |
Correct |
21 ms |
20972 KB |
Output is correct |
15 |
Correct |
22 ms |
20972 KB |
Output is correct |
16 |
Execution timed out |
1104 ms |
242700 KB |
Time limit exceeded |
17 |
Halted |
0 ms |
0 KB |
- |