Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define mp make_pair
  4. #define mt make_tuple
  5. #define fi first
  6. #define se second
  7. #define pb push_back
  8. #define all(x) (x).begin(), (x).end()
  9. #define rall(x) (x).rbegin(), (x).rend()
  10. #define forn(i, n) for (ll i = 0; i < (ll)(n); ++i)
  11. #define for1(i, n) for (ll i = 1; i <= (ll)(n); ++i)
  12. #define ford(i, n) for (ll i = (ll)(n) - 1; i >= 0; --i)
  13. #define fore(i, a, b) for (ll i = (ll)(a); i <= (ll)(b); ++i)
  14.  
  15. using namespace std;
  16.  
  17. typedef pair<int, int> pii;
  18. typedef vector<int> vi;
  19. typedef vector<pii> vpi;
  20. typedef vector<vi> vvi;
  21. typedef long long ll;
  22. typedef vector<ll> vll;
  23. typedef vector<vll> vvll;
  24. typedef pair<ll, ll> pll;
  25. typedef double ld;
  26.  
  27. int t[1700000];
  28. vector <set <pair <int, int>>> t1 (500000);
  29. vector <int> findv;
  30.  
  31. void update (ll v, ll tl, ll tr, ll pos, int val, ll i) {
  32. if (pos > tr || pos < tl) {
  33. return;
  34. }
  35. if (tl == tr) {
  36. if (val == -1) {
  37. t[v] = -1;
  38. for (auto it : t1[pos]) {
  39. if (it.second == i) {
  40. t1[pos].erase(it);
  41. }
  42. else {
  43. t[v] = max (t[v], it.first);
  44. }
  45. }
  46. return;
  47. }
  48. t1[pos].insert({val, i});
  49. t[v] = max (t[v], val);
  50. return;
  51. }
  52.  
  53. ll tm = (tl + tr) >> 1;
  54. update (v * 2, tl, tm, pos, val, i);
  55. update (v * 2 + 1, tm + 1, tr, pos, val, i);
  56. t[v] = max(t[v * 2], t[v * 2 + 1]);
  57. }
  58.  
  59. int query (ll v, ll tl, ll tr, ll l, ll r) {
  60. if (tl > r || tr < l) {
  61. return -1;
  62. }
  63. if (l >= tl && r <= tr) {
  64. return t[v];
  65. }
  66. ll tm = (tl + tr) >> 1;
  67. ll q1 = query(v * 2, tl, tm, l, r);
  68. ll q2 = query(v * 2 + 1, tm + 1, tr, l, r);
  69. return max (q1, q2);
  70. }
  71.  
  72. void search (ll v, ll tl, ll tr, ll x) {
  73. if (tl > x) {
  74. return;
  75. }
  76. if (tl == tr) {
  77. for (auto i : t1[tl]) {
  78. findv.push_back(i.second);
  79. }
  80. return;
  81. }
  82. ll tm = (tl + tr) >> 1;
  83. ll q1 = query(v * 2, tl, tm, tl, tm);
  84. ll q2 = query(v * 2 + 1, tm + 1, tr, tm + 1, tr);
  85. if (q1 > x) {
  86. search(v * 2, tl, tm, x);
  87. }
  88. if (q2 > x) {
  89. search(v * 2 + 1, tm + 1, tr, x);
  90. }
  91. }
  92.  
  93. int main() {
  94. //freopen("17", "r", stdin);
  95. ios::sync_with_stdio(false);
  96. cin.tie(nullptr);
  97. cout.precision(10);
  98. cout << fixed;
  99.  
  100. ll n, x, y, start, end;
  101. int type;
  102. cin >> n;
  103. set <ll> m;
  104. vector <pair <int, pair <ll, ll>>> all_events (n + 10);
  105. forn (i, n) {
  106. cin >> type >> x >> y;
  107. all_events[i] = {type, {x, y}};
  108. if (type == 1) {
  109. start = x - y;
  110. end = x + y;
  111. m.insert(start);
  112. m.insert(end);
  113. }
  114. else {
  115. m.insert(x);
  116. }
  117. }
  118. map <ll, int> ctoi;
  119. ll it = 0;
  120. for (auto i : m) {
  121. ctoi[i] = it;
  122. it++;
  123. }
  124.  
  125. it = 0;
  126. //vector <bool> used(m.size());
  127. for (auto i : all_events) {
  128. if (i.first == 1) {
  129. update(1, 0, m.size() - 1, ctoi[i.se.fi - i.se.se], ctoi[i.se.fi + i.se.se], it);
  130. }
  131. else {
  132. findv.clear();
  133. search(1, 0, m.size() - 1, ctoi[i.se.fi]);
  134. //cout << "find: " << findv.size() << "\n";
  135. bool ok = false;
  136. for (auto j : findv) {
  137. if ((all_events[j].se.fi - i.se.fi) * (all_events[j].se.fi - i.se.fi) +
  138. (all_events[j].se.se - i.se.se) * (all_events[j].se.se - i.se.se) < all_events[j].se.se * all_events[j].se.se) {
  139. cout << j + 1 << "\n";
  140. update(1, 0, m.size() - 1, ctoi[all_events[j].se.fi - all_events[j].se.se], -1, j);
  141. ok = true;
  142. break;
  143. }
  144. }
  145. if (!ok) {
  146. cout << "-1\n";
  147. }
  148. }
  149. it++;
  150. }
  151. }
  152.  
  153. /*
  154. 2
  155. 1 24 10
  156. 2 16 14
  157.  
  158. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement