제출 #946316

#제출 시각아이디문제언어결과실행 시간메모리
946316NourWael거래 (IZhO13_trading)C++17
100 / 100
161 ms15700 KiB
#include <bits/extc++.h>
#define int long long 
using namespace std; 
using namespace __gnu_pbds; 
int const mxN = 3e5+5;
int seg[8*mxN], cor[8*mxN];
int n,pw,m,b;

void update ( int node, int l_n, int r_n, int l, int r, int val , int take) {
   if(r_n<=l || l_n>=r) return;
   if(l<=l_n && r>=r_n) { 
      val = (l_n-b) + val;
      seg[node] = max({seg[node],val,take}); 
      return;
   }
   take = max(take, seg[node]);
   int m = (l_n+r_n)/2;
   update(node*2+1, l_n, m, l, r, val, take);
   if(take) take += (m-l_n);
   update(node*2+2, m, r_n, l, r, val, take);
}

void down ( int node, int l, int r, int v) {
   seg[node] = max (seg[node], v);
   if(l==r-1) { cor[l] = node; return; }
   v = max(v,seg[node]);
   int m = (l+r)/2;
   down(node*2+1, l, m, v);
   if(v) v += m-l;
   down(node*2+2, m, r, v);

}

signed main() {
   ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
   
   cin>>n>>m; 
   pw = (1<<(__lg(n)+1)); 
   for(int i=0; i<m; i++) {
      int x,y,c; cin>>x>>y>>c;
      b = x;
      update(0,0,pw,x,y+1, c, 0);
   }
   //for(int i=0; i<=14; i++) cout<<i<<' '<<seg[i]<<'\n';
   down(0,0,pw,0);
   for(int i=1; i<=n; i++) {
     cout<<seg[cor[i]]<<' ';
   }
   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...