1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #include <bits/stdc++.h> using namespace std; const int Maxn = 100000 + 100; int N, M, Cnt; struct Tree { int val, id; }Tree[Maxn * 4];
vector <int> q[Maxn];
inline void push_up (int x) { if (Tree[x << 1].val == Tree[x << 1 | 1].val) Tree[x].val = Tree[x << 1].val, Tree[x].id = min(Tree[x << 1].id, Tree[x << 1 | 1].id); else if (Tree[x << 1].val > Tree[x << 1 | 1].val) Tree[x].val = Tree[x << 1].val, Tree[x].id = Tree[x << 1].id; else Tree[x].val = Tree[x << 1 | 1].val, Tree[x].id = Tree[x << 1 | 1].id; }
inline void build (int root, int l, int r) { if (l == r) { Tree[root].id = l; Tree[root].val = 0; return ; } int mid = (l + r) >> 1; build(root << 1, l, mid); build(root << 1 | 1, mid + 1, r); push_up(root); }
inline void update (int root, int l, int r, int x, int z) { if (l == r) { Tree[root].val += z; return ; } int mid = (l + r) >> 1; if (x <= mid) update(root << 1, l, mid, x, z); else update(root << 1 | 1, mid + 1, r, x, z); push_up(root); }
int main() { #ifdef hk_cnyali freopen("A.in", "r", stdin); freopen("A.out", "w", stdout); #endif scanf("%d%d", &N, &M); for (int i = 1; i <= M; ++i) { int x, y, z; scanf("%d%d%d", &x, &y, &z); q[x].push_back(z); q[y + 1].push_back(-z); } build(1, 1, 100000); for (int i = 1; i <= N; ++i) { for (int j = 0; j < q[i].size(); ++j) { if (q[i][j] > 0) update(1, 1, 100000, q[i][j], 1); else update(1, 1, 100000, -q[i][j], -1); } printf("%d\n", !Tree[1].val ? -1 : Tree[1].id); } return 0; }
|