Submission #5401

#TimeUsernameProblemLanguageResultExecution timeMemory
5401QwazTrading (IZhO13_trading)C++98
100 / 100
344 ms14576 KiB
#include <cstdio>
#include <set>
#include <algorithm>

using namespace std;
const int MAX = 300020;

struct events {
	int pos, h;
	bool open;

	events() {}
	events(int pos, int h, bool open) : pos(pos), h(h), open(open) {}

	bool operator < (const events &t) const {
		return pos < t.pos;
	}
};

int n, m, eFull;
events eList[MAX<<1];

void input(){
	scanf("%d%d", &n, &m);

	int i;
	for(i = 0; i<m; i++){
		int l, r, p;
		scanf("%d%d%d", &l, &r, &p);

		eList[eFull++] = events(l, p-l, 1);
		eList[eFull++] = events(r+1, p-l, 0);
	}

	sort(eList, eList+eFull);
}

multiset < int > st;

void solve(){
	int i, j = 0;
	for(i = 1; i<=n; i++){
		while(j < eFull && eList[j].pos == i){
			if(eList[j].open) st.insert(eList[j].h);
			else st.erase(st.lower_bound(eList[j].h));

			j++;
		}

		if(st.size() == 0) printf("0 ");
		else {
			multiset < int >::iterator it = st.end();
			it--;
			printf("%d ", *it+i);
		}
	}
	puts("");
}

int main(){
	input();

	solve();

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...