Advertisement
TrickmanOff

trertyu

Jan 7th, 2021
765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. //#pragma optimization_level 3
  2. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
  3. //#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <vector>
  8. #include <queue>
  9. #include <functional>
  10. #include <set>
  11. #include <map>
  12. #include <math.h>
  13. #include <cmath>
  14. #include <string>
  15. #include <random>
  16. #include <unordered_set>
  17. #include <unordered_map>
  18. #include <bitset>
  19. #include <string.h>
  20. #include <stack>
  21. #include <assert.h>
  22. #include <list>
  23. #include <time.h>
  24. #include <memory>
  25. #include <chrono>
  26. using namespace std;
  27. //
  28. #define fast cin.tie(0);cout.tie(0);cin.sync_with_stdio(0);cout.sync_with_stdio(0);
  29. #define cin in
  30. #define cout out
  31. #define ll long long
  32. #define db double
  33. #define ld long double
  34. #define uset unordered_set
  35. #define umap unordered_map
  36. #define ms multiset
  37. #define pb push_back
  38. #define pq priority_queue
  39. #define umap unordered_map
  40. #define uset unordered_set
  41. #define ull unsigned long long
  42. #define pii pair<int, int>
  43. #define pll pair<ll, ll>
  44. #define pdd pair<ld, ld>
  45. #define pnn pair<Node*, Node*>
  46. #define uid uniform_int_distribution
  47. #define PI acos(-1.0)
  48. //#define sort(a, b) sort(a.begin(), a.end(), b())
  49. //mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  50. ifstream in("input.txt");
  51. ofstream out("output.txt");
  52.  
  53. const int MAX_N = 1e5;
  54. ll sum[4*MAX_N];
  55. int mini[4*MAX_N];
  56. ll push[4*MAX_N];  // val in v is already recalced
  57. int n;
  58.  
  59. void recalc(int v) {
  60.     sum[v] = sum[2*v] + sum[2*v + 1];
  61.     mini[v] = min(mini[2*v], mini[2*v+1]);
  62. }
  63.  
  64. void make_push(int v, int lb, int rb) {
  65.     if (push[v] == -1) return;
  66.    
  67.     int l = 2*v;
  68.     int r = l + 1;
  69.     int m = (lb + rb) / 2;
  70.     mini[l] = mini[r] = push[v];
  71.     sum[l] = (m - lb + 1) * push[v];
  72.     sum[r] = (rb - m) * push[v];
  73.     push[l] = push[r] = push[v];
  74.     push[v] = -1;
  75. }
  76.  
  77. ll get_sum(int v, int lb, int rb, int l, int r) {
  78.     if (r < lb || l > rb)
  79.         return 0;
  80.     if (lb == l && rb == r)
  81.         return sum[v];
  82.    
  83.     make_push(v, lb, rb);
  84.    
  85.     int m = (lb + rb) / 2;
  86.     return  get_sum(2*v, lb, m, l, min(m, r)) +
  87.             get_sum(2*v+1, m+1, rb, max(m+1, l), r);
  88. }
  89.  
  90. // left value <= x or -1
  91. int bin_s(int v, int lb, int rb, int x) {
  92.     if (lb == rb) {
  93.         if (mini[v] <= x) return lb;
  94.         else return -1;
  95.     }
  96.    
  97.     make_push(v, lb, rb);
  98.    
  99.     int m = (lb + rb) / 2;
  100.     if (mini[2*v] <= x)
  101.         return bin_s(2*v, lb, m, x);
  102.     else
  103.         return bin_s(2*v+1, m+1, rb, x);
  104. }
  105.  
  106. int bin_s(int x) {
  107.     return bin_s(0, 0, n-1, x);
  108. }
  109.  
  110. void seg_assign(int v, int lb, int rb, int l, int r, ll x) {
  111.     if (l > rb || r < lb) return;
  112.     if (l == lb && r == rb) {
  113.         push[v] = x;
  114.         sum[v] = (rb - lb + 1) * x;
  115.         mini[v] = x;
  116.         return;
  117.     }
  118.    
  119.     make_push(v, lb, rb);
  120.     int m = (lb + rb) / 2;
  121.     seg_assign(2*v, lb, m, l, min(m, r), x);
  122.     seg_assign(2*v+1, m+1, rb, max(m+1, l), r, x);
  123.     recalc(v);
  124. }
  125.  
  126. void pref_max(int r, int x) {
  127.     int l = bin_s(x);
  128.     seg_assign(0, 0, n-1, l, r, x);
  129. }
  130.  
  131. int main() {
  132.    
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement