Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #include<ext/pb_ds/assoc_container.hpp>
- #include<ext/pb_ds/tree_policy.hpp>
- using namespace __gnu_pbds;
- #define LagaKar ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define pb push_back
- #define pf push_front
- #define pob pop_back
- #define pof pop_front
- #define mp make_pair
- #define fi first
- #define se second
- #define lb lower_bound
- #define ub upper_bound
- #define ook order_of_key //number of elements less than k
- #define fbo find_by_order //k th element
- #define nline "\n"
- #define YES cout<<"YES"<<nline
- #define NO cout<<"NO"<<nline
- #define Yes cout<<"Yes"<<nline
- #define No cout<<"No"<<nline
- //--------------------------------------------------------------------------------------------------------------
- #define precise(ans) cout<<fixed<<setprecision(15)<<ans
- #define fo(i,n) for(ll i=0;i<n;i++)
- #define Fo(i,k,n) for(ll i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
- #define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
- #define sz(x) ((ll)(x).size())
- #define all(x) x.begin(), x.end()
- #define MAX(x) *max_element(all(x))
- #define MIN(x) *min_element(all(x))
- #define SUM(x) accumulate(all(x), 0LL)
- #define CNT(x) __builtin_popcountll(x)
- //--------------------------------------------------------------------------------------------------------------
- typedef long long ll; typedef unsigned long long ull; typedef long double lld;
- template <typename T> using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
- template <typename T, typename R> using o_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
- typedef pair<ll, ll> pl; typedef vector<ll> vl;typedef vector<vl> vvl;
- typedef vector<pl> vpl; template <typename T> using prq_mx = priority_queue<T>;
- template <typename T> using prq_mn = priority_queue<T, vector<T>, greater<T>>;
- //------------------------------------------------------------------------------------------------------------
- #ifdef hydracody
- #include <C:\Users\Anurag Dwivedi\Desktop\cpc\debug.h>
- #else
- #define debug(x)
- #endif
- //------------------------------------------------------------------------------------------------------------
- const double eps=1e-9;const ll INF=(ll)1e9;const ll inf64=2e18;const ll INF64=9e18;
- #define PI 3.1415926535897932384626
- #define MOD 1000000007
- #define MOD1 998244353
- #define MOD2 1000000009
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- ll gcd(ll a, ll b) {if (b > a) {return gcd(b, a);} if (b == 0) {return a;} return gcd(b, a % b);}
- 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;}
- ll pinv(ll a, ll m){ return power(a, m - 2, m); }
- 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;}
- ll logceil(ll x){ll s=0;while(x>0){s++;x=x/2;}return s;}
- ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
- ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
- ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
- 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
- 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))
- ll getRandomNumber(ll l, ll r) {return uniform_int_distribution<ll>(l, r)(rng);}
- void starter(int t) {cout << "Case #" << t << ": ";}
- /////////////////////////////////////////////////////////////////////////////////////////////////
- /*Don't loss hope, one day you will make it. Till then work hard.
- One day these bad days will go and you will rock.*/
- struct node{
- ll s,pre,suff,sum,sz,lazy;
- node(){
- s=pre=suff=sum=sz=0;
- lazy=-1;
- }
- };
- struct Segtree{
- vector<node> t;
- Segtree(ll n) {
- t.resize(4*n);
- for(ll i=0;i<4*n;i++){
- t[i].lazy = -1;
- }
- }
- node merge(node n1,node n2){
- node n;
- n.sum=n1.sum+n2.sum;
- n.sz=n1.sz+n2.sz;
- n.pre=max(n1.pre,n1.sum+n2.pre);
- n.suff=max(n2.suff,n2.sum+n1.suff);
- n.s=max(n1.s,max(n2.s,n1.suff+n2.pre));
- return n;
- }
- void build(vector<ll>& a, ll v, ll tl, ll tr){
- if(tl == tr){
- t[v].sum = a[tl];
- t[v].sz = 1;
- t[v].s=t[v].pre=t[v].suff=max(0ll,a[tl]);
- }else{
- ll tm = (tl + tr)/2;
- build(a, v*2, tl, tm);
- build(a, v*2+1, tm+1, tr);
- t[v] = merge(t[v*2] , t[v*2+1]);
- }
- }
- void push(ll v){
- if(t[v].lazy==-1) return;
- t[v*2].sum = t[v*2].sz * t[v].lazy;
- t[v*2].s=t[v*2].pre=t[v*2].suff=max(0ll,t[v*2].sum);
- t[v*2+1].sum = t[v*2+1].sz * t[v].lazy;
- t[v*2+1].s=t[v*2+1].pre=t[v*2+1].suff=max(0ll,t[v*2+1].sum);
- t[2*v].lazy = t[v].lazy;
- t[v*2+1].lazy = t[v].lazy;
- t[v].lazy = -1;
- }
- void update(ll v, ll tl, ll tr, ll l, ll r, ll chg){
- if(l > r){
- return;
- }
- if(l <= tl && tr <= r){
- t[v].sum = t[v].sz * chg;
- t[v].s=t[v].pre=t[v].suff=max(0ll,t[v].sum);
- t[v].lazy = chg;
- } else {
- push(v);
- ll tm = (tl + tr)/2;
- update(v*2, tl, tm, l, min(r, tm), chg);
- update(v*2+1, tm+1, tr, max(l, tm+1), r, chg);
- t[v] = merge(t[v*2],t[v*2+1]);
- }
- }
- node query(ll v, ll tl, ll tr, ll l, ll r) {
- if(l>r) return node();
- if(l <= tl && tr <= r){
- return t[v];
- }
- push(v);
- ll tm = (tl + tr)/2;
- node L=query(v*2, tl, tm, l, min(r, tm));
- node R=query(v*2+1, tm+1, tr, max(l, tm+1), r);
- return merge(L,R);
- }
- };
- /*
- Segtree s(n);
- s.build(a,1,0,n-1);
- s.query(1,0,n-1,l,r);
- s.update(1,0,n-1,l,r,val); [l,r]
- */
- void chal(){
- ll n,m;
- cin>>n>>m;
- vl aa(n,0);
- Segtree s(n);
- s.build(aa,1,0,n-1);
- fo(i,m){
- ll l,r,val;
- cin>>l>>r>>val;
- s.update(1,0,n-1,l,r-1,val);
- cout<<s.query(1,0,n-1,0,n-1).s<<nline;
- }
- }
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- int32_t main() {
- LagaKar;
- #ifdef hydracody
- freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("error.txt", "w", stderr);
- #endif
- ll t; t = 1;
- // cin>>t;
- for (ll i = 1; i <= t; i++) {
- // cerr<<"Case : "<<i<<endl;
- // starter();
- chal();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment