Submission #340192

#TimeUsernameProblemLanguageResultExecution timeMemory
340192amunduzbaevTrading (IZhO13_trading)C++14
100 / 100
466 ms11756 KiB
/** made by amunduzbaev **/
 
#include <bits/stdc++.h>
//~ #include <ext/pb_ds/assoc_container.hpp> 
//~ #include <ext/pb_ds/tree_policy.hpp> 
//~ #include <ext/rope>
 
//~ using namespace __gnu_pbds;
//~ using namespace __gnu_cxx;
using namespace std;
 
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define ub upper_bound
#define lb lower_bound
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<ll, ll>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(),x.rend()
#define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define vll vector<ll>
#define vii vector<int>
#define vpii vector<pii>
#define vpll vector<pll>
#define cnt(a)__builtin_popcount(a)
template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;}
template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;}
 
//~ typedef tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
 
const int N = 3e5+5;
const int mod = 1e9+7;
const ll inf = 1e18;
const ld Pi = acos(-1);
int s, n, m, k, t, ans[N];

struct node{
	int lx, rx;
};
node tree[4*N];

void prop(int x, int lx, int rx){
	if(!tree[x].lx || lx == rx) return ;
	int mid = (tree[x].lx + tree[x].rx)/2;
	umax(tree[x*2].lx, tree[x].lx);
	umax(tree[x*2].rx, mid);
	umax(tree[x*2+1].lx, mid+1);
	umax(tree[x*2+1].rx, tree[x].rx);
	tree[x].lx = tree[x].rx = 0;
}
int cur;

void update(int l, int r, int lx, int rx, int x){
	prop(x, lx, rx);
	if(lx > r || rx < l) return ;
	if(lx >= l && rx <= r){
		umax(tree[x].lx, cur);
		umax(tree[x].rx, cur + (rx-lx+1)-1);
		cur += (rx-lx+1);
		prop(x, lx, rx);
		return;
	}
	int mid = (lx + rx)/2;
	update(l, r, lx, mid, x*2);
	update(l, r, mid+1, rx, x*2+1);
}

void tmprop(int x, int lx, int rx){
	if(!tree[x].lx) {
		if(lx == rx) return;
		tmprop(x*2, lx, (lx + rx)/2);
		tmprop(x*2+1, (lx + rx)/2+1, rx);
		return;
	}
	if(lx == rx){
		umax(ans[lx-1], tree[x].lx);
		return;
	}
	int mid = (tree[x].lx + tree[x].rx)/2;
	umax(tree[x*2].lx, tree[x].lx);
	umax(tree[x*2].rx, mid);
	umax(tree[x*2+1].lx, mid+1);
	umax(tree[x*2+1].rx, tree[x].rx);
	tree[x].lx = tree[x].rx = 0;
	tmprop(x*2, lx, (lx + rx)/2);
	tmprop(x*2+1, (lx + rx)/2+1, rx);
}


void solve(){
	int m;
	cin>>n>>m;
	
	s = 2;
	while(s < n) s<<=1;

	for(int i=0;i<m;i++){
		int l, r, x;
		cin>>l>>r>>x;
		cur = x;
		update(l, r, 1, s, 1);
	}
	
	tmprop(1, 1, s);
	for(int i=0;i<n;i++){
		cout<<ans[i]<<" ";
	}cout<<"\n";
	return;
}
 
int main(){
	fastios
	int t = 1;
	if(t) solve();
	else {
		cin>>t;
		while (t--) solve();
	}
	return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...