Hydracody

Untitled

Nov 11th, 2023 (edited)
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #include<ext/pb_ds/assoc_container.hpp>
  4. #include<ext/pb_ds/tree_policy.hpp>
  5. using namespace __gnu_pbds;
  6. #define LagaKar ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  7. #define pb push_back
  8. #define pf push_front
  9. #define pob pop_back
  10. #define pof pop_front
  11. #define mp make_pair
  12. #define fi first
  13. #define se second
  14. #define lb lower_bound
  15. #define ub upper_bound
  16. #define ook order_of_key   //number of elements less than k
  17. #define fbo find_by_order  //k th element
  18. #define nline "\n"
  19. #define YES cout<<"YES"<<nline
  20. #define NO cout<<"NO"<<nline
  21. #define Yes cout<<"Yes"<<nline
  22. #define No cout<<"No"<<nline
  23. //--------------------------------------------------------------------------------------------------------------
  24. #define precise(ans)  cout<<fixed<<setprecision(15)<<ans
  25. #define fo(i,n) for(ll i=0;i<n;i++)
  26. #define Fo(i,k,n) for(ll i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
  27. #define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
  28. #define sz(x) ((ll)(x).size())
  29. #define all(x) x.begin(), x.end()
  30. #define MAX(x) *max_element(all(x))
  31. #define MIN(x) *min_element(all(x))
  32. #define SUM(x) accumulate(all(x), 0LL)
  33. #define CNT(x) __builtin_popcountll(x)
  34. //--------------------------------------------------------------------------------------------------------------
  35. typedef long long ll; typedef unsigned long long ull; typedef long double lld;
  36. template <typename T> using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  37. template <typename T, typename R> using o_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  38. typedef pair<ll, ll>  pl;   typedef vector<ll>  vl;typedef vector<vl>  vvl;
  39. typedef vector<pl>  vpl;    template <typename T> using prq_mx  = priority_queue<T>;
  40. template <typename T> using prq_mn = priority_queue<T, vector<T>, greater<T>>;
  41. //------------------------------------------------------------------------------------------------------------
  42. #ifdef hydracody
  43.     #include <C:\Users\Anurag Dwivedi\Desktop\cpc\debug.h>
  44. #else
  45. #define debug(x)
  46. #endif
  47. //------------------------------------------------------------------------------------------------------------
  48. const double eps=1e-9;const ll INF=(ll)1e9;const ll inf64=2e18;const ll INF64=9e18;
  49. #define PI 3.1415926535897932384626
  50. #define MOD 1000000007
  51. #define MOD1 998244353
  52. #define MOD2 1000000009
  53. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  54. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  55. ll gcd(ll a, ll b) {if (b > a) {return gcd(b, a);} if (b == 0) {return a;} return gcd(b, a % b);}
  56. ll power(ll x,ll y, ll p){if(y==0)return 1;ll res = 1;x = x % p;if (x == 0) return 0;while (y > 0){if (y & 1)res = (res*x) % p;y = y>>1;x = (x*x) % p;}return res;}
  57. ll pinv(ll a, ll m){ return power(a, m - 2, m); }
  58. ll int_sqrt (ll x) {ll ans = 0; for (ll k = 1LL << 30; k != 0; k /= 2) {if ((ans + k) * (ans + k) <= x) {ans += k;}} return ans;}
  59. ll logceil(ll x){ll s=0;while(x>0){s++;x=x/2;}return s;}
  60. ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
  61. ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
  62. ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
  63. ll mod_div(ll a, ll b, ll m) {a = a % m; b = b % m; return (mod_mul(a, pinv(b, m), m) + m) % m;}  //only for prime m
  64. ll phin(ll n) {ll number = n; if (n % 2 == 0) {number /= 2; while (n % 2 == 0) n /= 2;} for (ll i = 3; i <= sqrt(n); i += 2) {if (n % i == 0) {while (n % i == 0)n /= i; number = (number / i * (i - 1));}} if (n > 1)number = (number / n * (n - 1)) ; return number;} //O(sqrt(N))
  65. ll getRandomNumber(ll l, ll r) {return uniform_int_distribution<ll>(l, r)(rng);}
  66. void starter(int t) {cout << "Case #" << t << ": ";}
  67.  
  68. /////////////////////////////////////////////////////////////////////////////////////////////////
  69. /*Don't loss hope, one day you will make it. Till then work hard.
  70. One day these bad days will go and you will rock.*/
  71.  
  72. struct node{
  73.   ll s,pre,suff,sum,sz,lazy;
  74.   node(){
  75.     s=pre=suff=sum=sz=0;
  76.     lazy=-1;
  77.   }
  78.  
  79. };
  80.  
  81. struct Segtree{
  82.     vector<node> t;
  83.     Segtree(ll n) {
  84.         t.resize(4*n);
  85.         for(ll i=0;i<4*n;i++){
  86.           t[i].lazy = -1;
  87.         }
  88.     }
  89.     node merge(node n1,node n2){
  90.       node n;
  91.       n.sum=n1.sum+n2.sum;
  92.       n.sz=n1.sz+n2.sz;
  93.       n.pre=max(n1.pre,n1.sum+n2.pre);
  94.       n.suff=max(n2.suff,n2.sum+n1.suff);
  95.       n.s=max(n1.s,max(n2.s,n1.suff+n2.pre));
  96.       return n;
  97.     }
  98.     void build(vector<ll>& a, ll v, ll tl, ll tr){
  99.         if(tl == tr){
  100.             t[v].sum = a[tl];
  101.             t[v].sz = 1;
  102.             t[v].s=t[v].pre=t[v].suff=max(0ll,a[tl]);
  103.         }else{
  104.             ll tm = (tl + tr)/2;
  105.             build(a, v*2, tl, tm);
  106.             build(a, v*2+1, tm+1, tr);
  107.             t[v] = merge(t[v*2] , t[v*2+1]);
  108.         }
  109.     }
  110.     void push(ll v){
  111.       if(t[v].lazy==-1) return;
  112.         t[v*2].sum = t[v*2].sz * t[v].lazy;
  113.         t[v*2].s=t[v*2].pre=t[v*2].suff=max(0ll,t[v*2].sum);
  114.  
  115.         t[v*2+1].sum = t[v*2+1].sz * t[v].lazy;
  116.         t[v*2+1].s=t[v*2+1].pre=t[v*2+1].suff=max(0ll,t[v*2+1].sum);
  117.  
  118.         t[2*v].lazy = t[v].lazy;
  119.         t[v*2+1].lazy = t[v].lazy;
  120.         t[v].lazy = -1;
  121.     }
  122.     void update(ll v, ll tl, ll tr, ll l, ll r, ll chg){
  123.         if(l > r){
  124.             return;
  125.         }
  126.         if(l <= tl && tr <= r){
  127.             t[v].sum = t[v].sz * chg;
  128.             t[v].s=t[v].pre=t[v].suff=max(0ll,t[v].sum);            
  129.             t[v].lazy = chg;
  130.         } else {
  131.             push(v);
  132.             ll tm = (tl + tr)/2;
  133.             update(v*2, tl, tm, l, min(r, tm), chg);
  134.             update(v*2+1, tm+1, tr, max(l, tm+1), r, chg);
  135.             t[v] = merge(t[v*2],t[v*2+1]);
  136.         }
  137.     }
  138.     node query(ll v, ll tl, ll tr, ll l, ll r) {
  139.         if(l>r) return node();
  140.         if(l <= tl && tr <= r){
  141.             return t[v];
  142.         }
  143.         push(v);
  144.         ll tm = (tl + tr)/2;
  145.         node L=query(v*2, tl, tm, l, min(r, tm));
  146.         node R=query(v*2+1, tm+1, tr, max(l, tm+1), r);
  147.         return merge(L,R);
  148.     }
  149. };
  150. /*
  151. Segtree s(n);
  152. s.build(a,1,0,n-1);
  153. s.query(1,0,n-1,l,r);
  154. s.update(1,0,n-1,l,r,val);  [l,r]
  155. */
  156.  
  157.  
  158.  
  159.  
  160.  
  161. void  chal(){
  162.   ll n,m;
  163.   cin>>n>>m;
  164.   vl aa(n,0);
  165.   Segtree s(n);
  166.   s.build(aa,1,0,n-1);
  167.  fo(i,m){
  168.   ll l,r,val;
  169.   cin>>l>>r>>val;
  170.   s.update(1,0,n-1,l,r-1,val);
  171.   cout<<s.query(1,0,n-1,0,n-1).s<<nline;
  172.  }
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. }
  191.  
  192.  
  193.  
  194.  
  195. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  196. int32_t main() {
  197.   LagaKar;
  198. #ifdef hydracody
  199.   freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("error.txt", "w", stderr);
  200. #endif
  201.   ll  t; t = 1;
  202.   // cin>>t;
  203.   for (ll i = 1; i <= t; i++) {
  204.     // cerr<<"Case : "<<i<<endl;
  205.     // starter();
  206.     chal();
  207.   }
  208.   return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment