#include<bits/stdc++.h>
//#include<bits/extc++.h>
using namespace std;
int n;
int ar[200005];
map<int,vector<int>>dp[200005];
void chmn(vector<int>&nw,vector<int>a,vector<int>b){
for(int i=0;i<min(a.size(),b.size());i++){
if(a[i]<b[i]){
swap(nw,a);
return;
}
if(a[i]>b[i]){
swap(nw,b);
return;
}
}
if(a.size()<b.size()){
swap(nw,a);
return;
}
swap(nw,b);
}
void mrg(vector<int>&vc,vector<int>&a,vector<int>&b){
int ait=0;int bit=0;
for(int lg=0;(1<<lg)<=a.size()*2;lg++){
for(int k=0;k<(1<<lg)&&(ait+k)<a.size();k++){
vc.push_back(a[ait+k]);
}
ait+=(1<<lg);
for(int k=0;k<(1<<lg)&&(bit+k)<b.size();k++){
vc.push_back(b[bit+k]);
}
bit+=(1<<lg);
}
}
vector<pair<int,int>>seq;
map<int,bool>vis[200005];
void dfs(int nw,int nwv){
if(vis[nw][nwv]){return;}
vis[nw][nwv]=1;
if(nw*2>n){
//dp[nw][nwv]={nwv};
seq.push_back({nw,nwv});
return;
}
if(nw*2+1>n){
// chmn(dp[nw][nwv],{nwv,ar[nw*2]},{ar[nw*2],nwv});
seq.push_back({nw,nwv});
return;
}
if(nwv<ar[nw*2]&&nwv<ar[nw*2+1]){
dfs(nw*2,ar[nw*2]);
dfs(nw*2+1,ar[nw*2+1]);
seq.push_back({nw,nwv});
return;
}
if(ar[nw*2]<nwv&&ar[nw*2]<ar[nw*2+1]){
dfs(nw*2,nwv);
dfs(nw*2+1,ar[nw*2+1]);
seq.push_back({nw,nwv});
return;
}
dfs(nw*2,nwv);
dfs(nw*2+1,ar[nw*2]);
dfs(nw*2,ar[nw*2]);
dfs(nw*2+1,nwv);
seq.push_back({nw,nwv});
}
void solve(int nw,int nwv){
if(dp[nw][nwv].size()){return;}
if(nw*2>n){
dp[nw][nwv]={nwv};
return;
}
if(nw*2+1>n){
chmn(dp[nw][nwv],{nwv,ar[nw*2]},{ar[nw*2],nwv});
return;
}
if(nwv<ar[nw*2]&&nwv<ar[nw*2+1]){
dp[nw][nwv].push_back(nwv);
solve(nw*2,ar[nw*2]);
solve(nw*2+1,ar[nw*2+1]);
mrg(dp[nw][nwv],dp[nw*2][ar[nw*2]],dp[nw*2+1][ar[nw*2+1]]);
return;
}
if(ar[nw*2]<nwv&&ar[nw*2]<ar[nw*2+1]){
dp[nw][nwv].push_back(ar[nw*2]);
solve(nw*2,nwv);
solve(nw*2+1,ar[nw*2+1]);
mrg(dp[nw][nwv],dp[nw*2][nwv],dp[nw*2+1][ar[nw*2+1]]);
return;
}
vector<int>vc;
vc.push_back(ar[nw*2+1]);
solve(nw*2,nwv);
solve(nw*2+1,ar[nw*2]);
mrg(vc,dp[nw*2][nwv],dp[nw*2+1][ar[nw*2]]);
dp[nw][nwv].push_back(ar[nw*2+1]);
solve(nw*2,ar[nw*2]);
solve(nw*2+1,nwv);
mrg(dp[nw][nwv],dp[nw*2][ar[nw*2]],dp[nw*2+1][nwv]);
chmn(dp[nw][nwv],dp[nw][nwv],vc);
}
signed main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>ar[i];
}
dfs(1,ar[1]);
int lit=0;
for(int i=0;i<seq.size();i++){
solve(seq[i].first,seq[i].second);
while(__lg(seq[lit].first)>__lg(seq[i].first)+1){
// vector<int>vc;
vector<int>().swap(dp[seq[lit].first][seq[lit].second]);
// swap(vc,dp[seq[lit].first][seq[lit].second]);
dp[seq[lit].first].erase(seq[lit].second);
lit++;
}
}
for(int i=0;i<dp[1][ar[1]].size();i++){
cout<<dp[1][ar[1]][i]<<" ";
}cout<<endl;
return 0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dp[i][j].size()){
cout<<i<<" "<<j<<":";
for(int v:dp[i][j]){
cout<<v<<" ";
}
cout<<endl;
}
}
}
}
Compilation message
swap.cpp: In function 'void chmn(std::vector<int>&, std::vector<int>, std::vector<int>)':
swap.cpp:9:14: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
9 | for(int i=0;i<min(a.size(),b.size());i++){
| ~^~~~~~~~~~~~~~~~~~~~~~~
swap.cpp: In function 'void mrg(std::vector<int>&, std::vector<int>&, std::vector<int>&)':
swap.cpp:28:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
28 | for(int lg=0;(1<<lg)<=a.size()*2;lg++){
| ~~~~~~~^~~~~~~~~~~~
swap.cpp:29:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | for(int k=0;k<(1<<lg)&&(ait+k)<a.size();k++){
| ~~~~~~~^~~~~~~~~
swap.cpp:33:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
33 | for(int k=0;k<(1<<lg)&&(bit+k)<b.size();k++){
| ~~~~~~~^~~~~~~~~
swap.cpp: In function 'int main()':
swap.cpp:129:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
129 | for(int i=0;i<seq.size();i++){
| ~^~~~~~~~~~~
swap.cpp:139:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
139 | for(int i=0;i<dp[1][ar[1]].size();i++){
| ~^~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19036 KB |
Output is correct |
2 |
Correct |
4 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19120 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
4 ms |
19036 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19036 KB |
Output is correct |
2 |
Correct |
4 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19120 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
4 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19212 KB |
Output is correct |
8 |
Correct |
4 ms |
19036 KB |
Output is correct |
9 |
Correct |
4 ms |
19220 KB |
Output is correct |
10 |
Correct |
4 ms |
19036 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19036 KB |
Output is correct |
2 |
Correct |
4 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19120 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
4 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19212 KB |
Output is correct |
8 |
Correct |
4 ms |
19036 KB |
Output is correct |
9 |
Correct |
4 ms |
19220 KB |
Output is correct |
10 |
Correct |
4 ms |
19036 KB |
Output is correct |
11 |
Correct |
5 ms |
19548 KB |
Output is correct |
12 |
Correct |
5 ms |
19548 KB |
Output is correct |
13 |
Correct |
5 ms |
19548 KB |
Output is correct |
14 |
Correct |
8 ms |
20572 KB |
Output is correct |
15 |
Correct |
8 ms |
20572 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19036 KB |
Output is correct |
2 |
Correct |
4 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19120 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
4 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19212 KB |
Output is correct |
8 |
Correct |
4 ms |
19036 KB |
Output is correct |
9 |
Correct |
4 ms |
19220 KB |
Output is correct |
10 |
Correct |
4 ms |
19036 KB |
Output is correct |
11 |
Correct |
5 ms |
19548 KB |
Output is correct |
12 |
Correct |
5 ms |
19548 KB |
Output is correct |
13 |
Correct |
5 ms |
19548 KB |
Output is correct |
14 |
Correct |
8 ms |
20572 KB |
Output is correct |
15 |
Correct |
8 ms |
20572 KB |
Output is correct |
16 |
Correct |
65 ms |
38596 KB |
Output is correct |
17 |
Correct |
64 ms |
38444 KB |
Output is correct |
18 |
Correct |
73 ms |
41140 KB |
Output is correct |
19 |
Correct |
581 ms |
153168 KB |
Output is correct |
20 |
Correct |
574 ms |
152716 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
19036 KB |
Output is correct |
2 |
Correct |
4 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19120 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
4 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19212 KB |
Output is correct |
8 |
Correct |
4 ms |
19036 KB |
Output is correct |
9 |
Correct |
4 ms |
19220 KB |
Output is correct |
10 |
Correct |
4 ms |
19036 KB |
Output is correct |
11 |
Correct |
5 ms |
19548 KB |
Output is correct |
12 |
Correct |
5 ms |
19548 KB |
Output is correct |
13 |
Correct |
5 ms |
19548 KB |
Output is correct |
14 |
Correct |
8 ms |
20572 KB |
Output is correct |
15 |
Correct |
8 ms |
20572 KB |
Output is correct |
16 |
Correct |
65 ms |
38596 KB |
Output is correct |
17 |
Correct |
64 ms |
38444 KB |
Output is correct |
18 |
Correct |
73 ms |
41140 KB |
Output is correct |
19 |
Correct |
581 ms |
153168 KB |
Output is correct |
20 |
Correct |
574 ms |
152716 KB |
Output is correct |
21 |
Correct |
305 ms |
106160 KB |
Output is correct |
22 |
Correct |
303 ms |
102636 KB |
Output is correct |
23 |
Correct |
295 ms |
103180 KB |
Output is correct |
24 |
Runtime error |
553 ms |
262144 KB |
Execution killed with signal 9 |
25 |
Halted |
0 ms |
0 KB |
- |