View difference between Paste ID: 8kc4WxBs and bCutNqfm
SHOW: | | - or go back to the newest paste.
1
#include <bits/stdc++.h>
2
   
3
using namespace std;
4
   
5
const int dd = (int)4e5 + 1;
6
const int inf = (1ll << 31) - 1;
7
8
vector<pair<int, int> > Q;
9
vector<int> iP;
10
 
11
void up(int i) {
12
    if (i == 1) return;
13
    if (Q[i / 2] < Q[i]) {
14
        swap(Q[i], Q[i / 2]);
15
        swap(iP[Q[i].second], iP[Q[i / 2].second]);
16
        up(i / 2);
17
    }
18
}
19
 
20
void down(int i) {
21
    int f = 0;
22
    if (i * 2 < (int)Q.size() && Q[i] < Q[i * 2]) {
23
        swap(Q[i], Q[i * 2]);
24
        swap(iP[Q[i].second], iP[Q[i * 2].second]);
25
        f = 1;
26
    }
27
    if (i * 2 + 1 < (int)Q.size() && Q[i] < Q[i * 2 + 1]) {
28
        if (f) {
29
            swap(Q[i], Q[i * 2]);
30
            swap(iP[Q[i].second], iP[Q[i * 2].second]);
31
        }   
32
        swap(Q[i], Q[i * 2 + 1]);
33
        swap(iP[Q[i].second], iP[Q[i * 2 + 1].second]);
34
        f = 2;
35
    }
36
    if (f) down(i * 2 + f - 1);
37
}
38
 
39
int get() {
40
    return Q[1].first;
41
}
42
43
void eget() {
44
	swap(Q[1], Q.back());
45
    swap(iP[Q[1].second], iP[Q.back().second]);
46
    iP[Q.back().second] = -1;
47
    Q.pop_back();
48
    if ((int)Q.size() > 1) down(1);
49
}
50
 
51
void dk(int a, int b) {
52
    Q[a].first = b;
53
    up(a);
54
}
55
56
void del(int a) {
57
	dk(a, inf);
58
	eget();
59
}
60
61
void push(int x) {
62
	Q.push_back({ x, (int)iP.size() });
63
    iP.push_back((int)Q.size() - 1);
64
    up((int)Q.size() - 1);
65
}
66
67
vector<pair<int, int> > add[dd];
68
vector<int> ded[dd];
69
70
int main() {
71
	int n, m;
72
	scanf("%d %d", &n, &m);
73
	Q.push_back({ -1, 0 });
74
	for (int i = 0; i < m; ++i) {
75
		int l, r, x;
76
		scanf("%d %d %d", &l, &r, &x);
77
		--l, --r;
78
		add[l].push_back({ x, r });
79
	}
80
81
	int cnt = 0;
82
	for (int i = 0; i < n; ++i) {
83
		for (auto j : add[i]) {
84
			push(j.first);
85
			ded[j.second + 1].push_back(cnt++);
86
		}
87
		for (int j : ded[i])
88
			del(iP[j]);
89
		if ((int)Q.size() == 1) printf("1 ");
90
		else printf("%d ", get());
91
	}
92
    return 0;
93
}