Advertisement
Guest User

Untitled

a guest
Dec 5th, 2013
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<cstdio>
  5. using namespace std;
  6. #define LL long long
  7. #define Nmax 303000
  8. #define int LL
  9. LL tree[4*Nmax]={0},a[Nmax]={0};
  10. int n,m;
  11. void push(int v,int l,int r)
  12. {
  13.      if (l == r) return ;
  14.      if (tree[v] == 0) return ;
  15.      tree[2*v] = max(tree[2*v],tree[v]);
  16.      tree[2*v+1] = max(tree[2*v+1] , tree[v] + (l+r)/2 - l + 1);
  17.      tree[v] = 0;
  18. }
  19. void down(int v,int l,int r)
  20. {
  21.      push(v,l,r);
  22.      if (l == r) a[l] = tree[v];
  23.      else
  24.       down(2*v,l,(l+r)/2),down(2*v+1,(l+r)/2+1,r);
  25. }
  26. void update(int v,int l,int r,int ll,int rr,LL x)
  27. {
  28.      push(v,l,r);
  29.      if (l == ll && r == rr) tree[v] = max(tree[v], x);
  30.      else
  31.      {
  32.          int m = (l + r)/2;
  33.          if (ll <= m) update(2*v,l,m,ll,min(rr,m),x);
  34.          if (rr > m) update(2*v+1,m+1,r,max(m+1,ll),rr,x+max(0,m-ll+1));
  35.      }
  36. }
  37. int main()
  38. {
  39.     freopen("trading.in","r",stdin);
  40.     freopen("trading.out","w",stdout);
  41.     cin >> n >> m;
  42.     for (int i = 1; i <= m ;i ++ )
  43.     {
  44.         int l,r,x;
  45.         scanf("%d%d%d",&l,&r,&x);
  46.         update(1,1,n,l,r,x);
  47.     }
  48.     down(1,1,n);
  49.     for (int i = 1 ;i < n ;i ++ )
  50.      printf("%d ",a[i]);
  51.     cout << a[n] << endl;
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement