Submission #234075

# Submission time Handle Problem Language Result Execution time Memory
234075 2020-05-22T23:40:46 Z hugo_pm Editor (BOI15_edi) C++17
100 / 100
114 ms 20728 KB
#include <algorithm>
#include <cassert>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
using ll = long long;

using PQ = vector<int>; 
const int maxElem = 3e5 + 5;
PQ hidden[maxElem];
int level[maxElem];
int lastEdit[maxElem];
int parent[maxElem];
int lg[maxElem];
int nbElem;

bool comp(const int &a, const int &b) {
	return level[a] < level[b];
}

void merge(PQ &dest, PQ &eaten) {
	if (dest.size() < eaten.size()) swap(dest, eaten); 
	if ((int)dest.size() < lg[eaten.size()]) {
		dest.insert(dest.end(), eaten.begin(), eaten.end());
		make_heap(dest.begin(), dest.end());
		return;
	}
	for (int x : eaten) {
		dest.push_back(x);
		push_heap(dest.begin(), dest.end(), comp);
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin >> nbElem;	
	for (int iElem = 1; iElem <= nbElem; ++iElem) {
		cin >> lastEdit[iElem];
		level[iElem] = max(0, -lastEdit[iElem]);
	}

	for (int i = 2; i < maxElem; ++i) {
		lg[i] = lg[i/2] + 1;
	}

	PQ cur;
	for (int iElem = nbElem; iElem >= 1; --iElem) {
		PQ nxt;
		while (!cur.empty() && level[cur.front()] > level[iElem]) {
			parent[cur.front()] = iElem-1;
			merge(nxt, hidden[cur.front()]);
			pop_heap(cur.begin(), cur.end(), comp);
			cur.pop_back();
		}
		nxt.push_back(iElem);
		push_heap(nxt.begin(), nxt.end(), comp);
		merge(hidden[iElem], cur);
		cur.swap(nxt);
	}

	for (int iElem = 1; iElem <= nbElem; ++iElem) {
		if (level[iElem] > 0) {
			lastEdit[iElem] = lastEdit[parent[iElem]];
		}
		cout << lastEdit[iElem] << "\n";
	}
}
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8576 KB Output is correct
2 Correct 10 ms 8832 KB Output is correct
3 Correct 9 ms 8576 KB Output is correct
4 Correct 9 ms 8576 KB Output is correct
5 Correct 10 ms 8704 KB Output is correct
6 Correct 13 ms 8576 KB Output is correct
7 Correct 10 ms 8704 KB Output is correct
8 Correct 9 ms 8704 KB Output is correct
9 Correct 10 ms 8704 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 91 ms 18040 KB Output is correct
2 Correct 90 ms 18040 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 14456 KB Output is correct
2 Correct 57 ms 15480 KB Output is correct
3 Correct 93 ms 13908 KB Output is correct
4 Correct 89 ms 18040 KB Output is correct
5 Correct 111 ms 19064 KB Output is correct
6 Correct 69 ms 14192 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8576 KB Output is correct
2 Correct 10 ms 8832 KB Output is correct
3 Correct 9 ms 8576 KB Output is correct
4 Correct 9 ms 8576 KB Output is correct
5 Correct 10 ms 8704 KB Output is correct
6 Correct 13 ms 8576 KB Output is correct
7 Correct 10 ms 8704 KB Output is correct
8 Correct 9 ms 8704 KB Output is correct
9 Correct 10 ms 8704 KB Output is correct
10 Correct 91 ms 18040 KB Output is correct
11 Correct 90 ms 18040 KB Output is correct
12 Correct 52 ms 14456 KB Output is correct
13 Correct 57 ms 15480 KB Output is correct
14 Correct 93 ms 13908 KB Output is correct
15 Correct 89 ms 18040 KB Output is correct
16 Correct 111 ms 19064 KB Output is correct
17 Correct 69 ms 14192 KB Output is correct
18 Correct 93 ms 20728 KB Output is correct
19 Correct 91 ms 20344 KB Output is correct
20 Correct 114 ms 15220 KB Output is correct
21 Correct 96 ms 18040 KB Output is correct
22 Correct 100 ms 19064 KB Output is correct