Advertisement
Giatro

Acordes intergaláticos

Mar 24th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long int ll;
  5. typedef unsigned long long int ull;
  6. typedef long double lld;
  7. typedef pair<ll, ll> pll;
  8. typedef vector<ll> vl;
  9.  
  10. #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
  11.  
  12. #define fr(i, n) for (ll i = 0; i < n; i++)
  13. #define frr(i, n) for (ll i = 1; i <= n; i++)
  14. #define frd(i, n) for (ll i = n; i >= 0; i--)
  15. #define forita(it, c) for(auto it = c.begin(); it != c.end(); it++)
  16.  
  17. #define sortvector(v) sort(v.begin(), v.end())
  18. #define sortvectorby(v, f) sort(v.begin(), v.end(), f)
  19.  
  20. #define pb push_back
  21. #define mk make_pair
  22. #define f first
  23. #define s second
  24.  
  25. #define cout1e(a) cout << (a) << endl
  26. #define cout2e(a, b) cout << (a) << " " << (b) << endl
  27. #define cout3e(a, b, c) cout << (a) << " " << (b) << " " << (c) << endl
  28. #define cout4e(a, b, c, d) cout << (a) << " " << (b) << " " << (c) << " " << (d) << endl
  29. #define debug(x) cout << #x << " = " << x << endl
  30. #define get1(a) cin >> (a)
  31. #define get2(a, b) cin >> (a) >> (b)
  32. #define get3(a, b, c) cin >> (a) >> (b) >> (c)
  33. #define get4(a, b, c, d) cin >> (a) >> (b) >> (c) >> (d)
  34.  
  35. const int INF = 0x3f3f3f3f;
  36. const ll LINF = 0x3f3f3f3f3f3f3f;
  37. const ll M = 1000000007;
  38. // ===================================================== //
  39.  
  40. const int N = 112345;
  41.  
  42. ll n, q;
  43. ll a, b, f;
  44. ll st[4*N][9], lz[4*N], aux[9];
  45. vector<ll> notes;
  46.  
  47. void build(ll i, ll l, ll r) {
  48.   if (l == r) {
  49.     fr (j, 9) st[i][j] = 0;
  50.     st[i][1] = 1;
  51.   } else {
  52.     ll m = l + (r-l)/2;
  53.     build(2*i, l, m);
  54.     build(2*i+1, m+1, r);
  55.     fr (j, 9) st[i][j] = (st[2*i][j] + st[2*i+1][j]);
  56.   }
  57.  
  58.   lz[i] = 0;
  59. }
  60.  
  61. void push(ll i, ll l, ll r) {
  62.   if (lz[i]) {
  63.     fr (j, 9) aux[(j+lz[i])%9] = st[i][j];
  64.     fr (j, 9) st[i][j] = aux[j];
  65.  
  66.     if (l != r) {
  67.       lz[2*i] += lz[i];
  68.       lz[2*i+1] += lz[i];
  69.     }
  70.   }
  71.   lz[i] = 0;
  72. }
  73.  
  74. void update(ll i, ll l, ll r, ll ql, ll qr, ll x) {
  75.   push(i, l, r);
  76.   if (r < ql || l > qr) return;
  77.   if (ql <= l && r <= qr) {
  78.     lz[i] = x;
  79.     push(i, l, r);
  80.     return;
  81.   }
  82.  
  83.   ll m = l + (r-l)/2;
  84.   update(2*i, l, m, ql, qr, x);
  85.   update(2*i+1, m+1, r, ql, qr, x);
  86.   fr (j, 9) st[i][j] = (st[2*i][j] + st[2*i+1][j]);
  87. }
  88.  
  89. void querry(ll i, ll l, ll r, ll ql, ll qr,
  90.             vector<ll> &v) {
  91.   push(i, l, r);
  92.   if (r < ql || l > qr) {
  93.     fr (j, 9) v[j] = 0;
  94.     return;
  95.   }
  96.   if (ql <= l && r <= qr) {
  97.     fr (j, 9) v[j] = st[i][j];
  98.     return;
  99.   }
  100.   ll m = l + (r-l)/2;
  101.   vector<ll> ret; ret.resize(10);
  102.   querry(2*i, l, m, ql, qr, ret);
  103.   fr (j, 9) v[j] = ret[j];
  104.   querry(2*i+1, m+1, r, ql, qr, ret);
  105.   fr (j, 9) v[j] += ret[j];
  106. }
  107.  
  108. void print(ll i, ll l, ll r) {
  109.   push(i, l, r);
  110.  
  111.   if (l == r) {
  112.     ll v = 0;
  113.     fr (j, 9)
  114.       if (st[i][j] == 1) { v = j; break; }
  115.  
  116.      printf("%lld\n", v);
  117.   } else {
  118.     ll m = l + (r-l)/2;
  119.     print(2*i, l, m);
  120.     print(2*i+1, m+1, r);
  121.   }
  122. }
  123.  
  124. int main(int argc, char const *argv[]) { fastio;
  125.   scanf("%lld%lld", &n, &q);
  126.   notes.resize(10);
  127.   ll maxi;
  128.   build(1, 1, n);
  129.  
  130.   fr (i, q) {
  131.     scanf("%lld%lld", &a, &b);
  132.     querry(1, 1, n, a+1, b+1, notes);
  133.  
  134.     maxi = 0;
  135.     for (int j = 8; j >= 0; j--)
  136.       if (notes[j] > maxi) {
  137.         maxi = notes[j];
  138.         f = j;
  139.       }
  140.     update(1, 1, n, a+1, b+1, f);
  141.   }
  142.  
  143.   print(1, 1, n);
  144.  
  145.  
  146.   return 0;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement