Submission #76596

# Submission time Handle Problem Language Result Execution time Memory
76596 2018-09-15T06:28:24 Z tmwilliamlin168 Swap (BOI16_swap) C++14
68 / 100
875 ms 263168 KB
#include <bits/stdc++.h>
using namespace std;

const int mxN=2e5, MGC1=65000*18*2;
int n, a[mxN+1], cdi;
unordered_map<int, int> di[mxN+1];
vector<int> dp[MGC1], v1, v2;

void mrg(vector<int> &v, vector<int> &a, vector<int> &b) {
	for(int l=1, i=0, j=0; i<a.size()||j<b.size(); i+=l, j+=l, l*=2) {
		for(int k=0; k<l&&i+k<a.size(); ++k)
			v.push_back(a[i+k]);
		for(int k=0; k<l&&j+k<b.size(); ++k)
			v.push_back(b[j+k]);
	}
}

void as(int i, int b) {
	if(di[i].find(b)==di[i].end())
		di[i][b]=-1;
}

vector<int>& gd(int i, int b) {
	return dp[di[i][b]];
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n;
	for(int i=1; i<=n; ++i)
		cin >> a[i];
	as(1, a[1]);
	for(int i=1; 2*i+1<=n; ++i) {
		for(auto it=di[i].begin(); it!=di[i].end(); ++it) {
			int b=it->first;
			if(a[2*i+1]<b&&a[2*i+1]<a[2*i]) {
				as(2*i, a[2*i]);
				as(2*i+1, b);
				as(2*i, b);
				as(2*i+1, a[2*i]);
			} else {
				as(2*i, max(b, a[2*i]));
				as(2*i+1, a[2*i+1]);
			}
		}
	}
	for(int i=n; i; --i) {
		for(auto it=di[i].begin(); it!=di[i].end(); ++it) {
			int b=it->first, c=it->second=cdi;
			cdi=(cdi+1)%MGC1;
			if(2*i+1<=n) {
				if(a[2*i+1]<b&&a[2*i+1]<a[2*i]) {
					v1={a[2*i+1]};
					v2={a[2*i+1]};
					mrg(v1, gd(2*i, a[2*i]), gd(2*i+1, b));
					mrg(v2, gd(2*i, b), gd(2*i+1, a[2*i]));
					dp[c]=min(v1, v2);
				} else {
					dp[c]={min(b, a[2*i])};
					mrg(dp[c], gd(2*i, max(b, a[2*i])), gd(2*i+1, a[2*i+1]));
				}
			} else if(2*i<=n)
				dp[c]={min(b, a[2*i]), max(b, a[2*i])};
			else
				dp[c]={b};
		}
	}
	for(int b : gd(1, a[1]))
		cout << b << " ";
}

Compilation message

swap.cpp: In function 'void mrg(std::vector<int>&, std::vector<int>&, std::vector<int>&)':
swap.cpp:10:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int l=1, i=0, j=0; i<a.size()||j<b.size(); i+=l, j+=l, l*=2) {
                         ~^~~~~~~~~
swap.cpp:10:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int l=1, i=0, j=0; i<a.size()||j<b.size(); i+=l, j+=l, l*=2) {
                                     ~^~~~~~~~~
swap.cpp:11:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int k=0; k<l&&i+k<a.size(); ++k)
                     ~~~^~~~~~~~~
swap.cpp:13:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int k=0; k<l&&j+k<b.size(); ++k)
                     ~~~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 58 ms 66240 KB Output is correct
2 Correct 58 ms 66424 KB Output is correct
3 Correct 60 ms 66560 KB Output is correct
4 Correct 74 ms 66716 KB Output is correct
5 Correct 58 ms 66716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 66240 KB Output is correct
2 Correct 58 ms 66424 KB Output is correct
3 Correct 60 ms 66560 KB Output is correct
4 Correct 74 ms 66716 KB Output is correct
5 Correct 58 ms 66716 KB Output is correct
6 Correct 57 ms 66716 KB Output is correct
7 Correct 61 ms 66728 KB Output is correct
8 Correct 60 ms 66728 KB Output is correct
9 Correct 58 ms 66736 KB Output is correct
10 Correct 58 ms 66740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 66240 KB Output is correct
2 Correct 58 ms 66424 KB Output is correct
3 Correct 60 ms 66560 KB Output is correct
4 Correct 74 ms 66716 KB Output is correct
5 Correct 58 ms 66716 KB Output is correct
6 Correct 57 ms 66716 KB Output is correct
7 Correct 61 ms 66728 KB Output is correct
8 Correct 60 ms 66728 KB Output is correct
9 Correct 58 ms 66736 KB Output is correct
10 Correct 58 ms 66740 KB Output is correct
11 Correct 76 ms 66872 KB Output is correct
12 Correct 57 ms 67004 KB Output is correct
13 Correct 60 ms 67008 KB Output is correct
14 Correct 63 ms 67440 KB Output is correct
15 Correct 63 ms 67700 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 66240 KB Output is correct
2 Correct 58 ms 66424 KB Output is correct
3 Correct 60 ms 66560 KB Output is correct
4 Correct 74 ms 66716 KB Output is correct
5 Correct 58 ms 66716 KB Output is correct
6 Correct 57 ms 66716 KB Output is correct
7 Correct 61 ms 66728 KB Output is correct
8 Correct 60 ms 66728 KB Output is correct
9 Correct 58 ms 66736 KB Output is correct
10 Correct 58 ms 66740 KB Output is correct
11 Correct 76 ms 66872 KB Output is correct
12 Correct 57 ms 67004 KB Output is correct
13 Correct 60 ms 67008 KB Output is correct
14 Correct 63 ms 67440 KB Output is correct
15 Correct 63 ms 67700 KB Output is correct
16 Correct 129 ms 82184 KB Output is correct
17 Correct 123 ms 82184 KB Output is correct
18 Correct 127 ms 82800 KB Output is correct
19 Correct 376 ms 137676 KB Output is correct
20 Correct 394 ms 137676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 66240 KB Output is correct
2 Correct 58 ms 66424 KB Output is correct
3 Correct 60 ms 66560 KB Output is correct
4 Correct 74 ms 66716 KB Output is correct
5 Correct 58 ms 66716 KB Output is correct
6 Correct 57 ms 66716 KB Output is correct
7 Correct 61 ms 66728 KB Output is correct
8 Correct 60 ms 66728 KB Output is correct
9 Correct 58 ms 66736 KB Output is correct
10 Correct 58 ms 66740 KB Output is correct
11 Correct 76 ms 66872 KB Output is correct
12 Correct 57 ms 67004 KB Output is correct
13 Correct 60 ms 67008 KB Output is correct
14 Correct 63 ms 67440 KB Output is correct
15 Correct 63 ms 67700 KB Output is correct
16 Correct 129 ms 82184 KB Output is correct
17 Correct 123 ms 82184 KB Output is correct
18 Correct 127 ms 82800 KB Output is correct
19 Correct 376 ms 137676 KB Output is correct
20 Correct 394 ms 137676 KB Output is correct
21 Correct 348 ms 137676 KB Output is correct
22 Correct 342 ms 137676 KB Output is correct
23 Correct 344 ms 137676 KB Output is correct
24 Runtime error 875 ms 263168 KB Execution killed with signal 9 (could be triggered by violating memory limits)
25 Halted 0 ms 0 KB -