Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<iostream>
- #include<cstdio>
- using namespace std;
- #define LL long long
- #define Nmax 303000
- #define int LL
- LL tree[4*Nmax]={0},a[Nmax]={0};
- int n,m;
- void push(int v,int l,int r)
- {
- if (l == r) return ;
- if (tree[v] == 0) return ;
- tree[2*v] = max(tree[2*v],tree[v]);
- tree[2*v+1] = max(tree[2*v+1] , tree[v] + (l+r)/2 - l + 1);
- tree[v] = 0;
- }
- void down(int v,int l,int r)
- {
- push(v,l,r);
- if (l == r) a[l] = tree[v];
- else
- down(2*v,l,(l+r)/2),down(2*v+1,(l+r)/2+1,r);
- }
- void update(int v,int l,int r,int ll,int rr,LL x)
- {
- push(v,l,r);
- if (l == ll && r == rr) tree[v] = max(tree[v], x);
- else
- {
- int m = (l + r)/2;
- if (ll <= m) update(2*v,l,m,ll,min(rr,m),x);
- if (rr > m) update(2*v+1,m+1,r,max(m+1,ll),rr,x+max(0,m-ll+1));
- }
- }
- int main()
- {
- freopen("trading.in","r",stdin);
- freopen("trading.out","w",stdout);
- cin >> n >> m;
- for (int i = 1; i <= m ;i ++ )
- {
- int l,r,x;
- scanf("%d%d%d",&l,&r,&x);
- update(1,1,n,l,r,x);
- }
- down(1,1,n);
- for (int i = 1 ;i < n ;i ++ )
- printf("%d ",a[i]);
- cout << a[n] << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement