Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. // Просто решаю.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. //KiruxaLight
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #define _USE_MATH_DEFINES
  7. #include <iostream>
  8. #include <vector>
  9. #include <string>
  10. #include <set>
  11. #include <map>
  12. #include <algorithm>
  13. #include <utility>
  14. #include <cmath>
  15. #include <iomanip>
  16. #include <stack>
  17. #include <deque>
  18. #include <queue>
  19. #include <cstdio>
  20. #include <unordered_map>
  21. #include <unordered_set>
  22. #include <numeric>
  23. #include <cassert>
  24. using namespace std;
  25. #define int long long
  26. #define all(a) a.begin(), a.end()
  27. #define rall(a) a.rbegin(), a.rend()
  28. const int INF = 1e9 + 123, MAXN = 2e5 + 47, MEGAINF = 1e18;
  29. int p = 41;
  30. template <class T>
  31. istream& operator >> (istream& in, vector <T>& a)
  32. {
  33.     for (auto& i : a)
  34.         in >> i;
  35.     return in;
  36. }
  37. template <class T>
  38. ostream& operator << (ostream& out, vector <T>& a)
  39. {
  40.     for (auto& i : a)
  41.         out << i << " ";
  42.     return out;
  43. }
  44. template <class T, class U>
  45. istream& operator >> (istream& in, vector <pair <T, U>>& a)
  46. {
  47.     for (auto& i : a)
  48.         in >> i.first >> i.second;
  49.     return in;
  50. }
  51. template <class T, class U>
  52. ostream& operator << (ostream& out, vector <pair <T, U>>& a)
  53. {
  54.     for (auto& i : a)
  55.         out << i.first << " " << i.second << endl;
  56.     return out;
  57. }
  58. struct node
  59. {
  60.     int l, r, mn, add, mx;
  61.     node()
  62.     {
  63.         l = r = -1;
  64.         mn = INF;
  65.         add = 0;
  66.         mx = -INF;
  67.     }
  68. };
  69. node t[MAXN * 4];
  70. vector <int> a(MAXN * 4);
  71. void push(int v)
  72. {
  73.     if (t[v].add != 0)
  74.     {
  75.         t[v].mn += t[v].add;
  76.         t[v].mx += t[v].add;
  77.         if (t[v].l != t[v].r)
  78.         {
  79.             t[v * 2].add = t[v].add;
  80.             t[v * 2 + 1].add = t[v].add;
  81.         }
  82.         t[v].add = 0;
  83.     }
  84. }
  85. void build(int l = 0, int r = MAXN - 1, int v = 1)
  86. {
  87.     t[v].l = l;
  88.     t[v].r = r;
  89.     if (l == r)
  90.         t[v].mn = a[l], t[v].mx = a[l];
  91.     else
  92.     {
  93.         int mid = l + r >> 1;
  94.         build(l, mid, v * 2);
  95.         build(mid + 1, r, v * 2 + 1);
  96.         t[v].mn = min(t[v * 2].mn, t[v * 2 + 1].mn);
  97.         t[v].mx = max(t[v * 2].mx, t[v * 2 + 1].mx);
  98.     }
  99. }
  100. void update(int l, int r, int val, int v = 1)
  101. {
  102.     push(v);
  103.     if (r < t[v].l || t[v].r < l)
  104.         return;
  105.     if (t[v].l >= l && t[v].r <= r)
  106.     {
  107.         t[v].add += val;
  108.         push(v);
  109.         return;
  110.     }
  111.     update(l, r, val, v * 2);
  112.     update(l, r, val, v * 2 + 1);
  113.     t[v].mn = min(t[v * 2].mn, t[v * 2 + 1].mn);
  114.     t[v].mx = max(t[v * 2].mx, t[v * 2 + 1].mx);
  115. }
  116. int get_min(int l, int r, int v = 1)
  117. {
  118.     push(v);
  119.     if (t[v].l > r || t[v].r < l)
  120.         return INF;
  121.     if (t[v].r <= r && t[v].l >= l)
  122.         return t[v].mn;
  123.     return min(get_min(l, r, v * 2), get_min(l, r, v * 2 + 1));
  124. }
  125. int get_max(int l, int r, int v = 1)
  126. {
  127.     push(v);
  128.     if (t[v].l > r || t[v].r < l)
  129.         return -INF;
  130.     if (t[v].r <= r && t[v].l >= l)
  131.         return t[v].mx;
  132.     return max(get_max(l, r, v * 2), get_max(l, r, v * 2 + 1));
  133. }
  134. signed main()
  135. {
  136.     setlocale(LC_ALL, "rus");
  137.  
  138.     /*freopen(".in", "r", stdin);
  139.     freopen(".out", "w", stdout);*/
  140.  
  141.     ios_base::sync_with_stdio(false);
  142.     cin.tie(NULL);
  143.     cout.tie(NULL);
  144.  
  145.     int n, k, m;
  146.     cin >> n >> k >> m;
  147.     a.assign(MAXN, k);
  148.     build();
  149.     while (m--)
  150.     {
  151.         int l, r;
  152.         cin >> l >> r;
  153.         --r;
  154.         int mn = get_min(l, r);
  155.         if (mn <= 0)
  156.             cout << "0\n";
  157.         else
  158.             cout << "1\n", update(l, r, -1);
  159.     }
  160. }
  161. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  162. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  163.  
  164. // Советы по началу работы
  165. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  166. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  167. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  168. //   4. В окне "Список ошибок" можно просматривать ошибки.
  169. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  170. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement