#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define sz size() #define pb push_back #define mp make_pair #define fi first #define se second #define all(c) (c).begin(), (c).end() #define rep(i,a,b) for(ll i=(a);i<(b);++i) #define clr(a, b) memset((a), (b) ,sizeof(a)) #define ctos(c) string(1,c) #define print(x) cout<<#x<<" = "<> n >> k; vector , ll> > v; rep(i, 0, n) { ll a, b, c; cin >> a >> b >> c; a *= A; b = 1000000 - b; v.pb(mp(mp(c, a + 100000 * C + b), i)); } sort(all(v)); rep(i, 0, 100005) { d1[i] = C; d2[i] = -C; } rep(i, 0, v.sz) { d1[v[i].fi.fi] = min(d1[v[i].fi.fi], i); d2[v[i].fi.fi] = max(d2[v[i].fi.fi], i); } init_sst(v.sz); rep(i, 0, v.sz) { add_sst(i, i + 1, v[i].fi.se, 0, 0, nn_sst); } ll index = 0; rep(i, 0, v.sz) { ll a = query_sst(0, n, 0, 0, nn_sst); long long low = 0; long long high = n - 1; while (low < high) { long long mid = (high + low) >> 1; if (query_sst(0, mid + 1, 0, 0, nn_sst) == a) { high = mid; } else { low = mid + 1; } } ll p = low; cout << v[p].se << endl; ll g = v[p].fi.fi; add_sst(d1[g], d2[g] + 1, -1 * C, 0, 0, nn_sst); add_sst(p, p + 1, -INF, 0, 0, nn_sst); index++; if (index == k)break; } return 0; }