Pagini recente » Cod sursa (job #2082186) | Cod sursa (job #1479324) | Cod sursa (job #312399) | Cod sursa (job #1966575) | Cod sursa (job #2180577)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;
FILE *out = fopen("trade.out", "w");
#define dim 100000
char buff[dim];
int p = 0;
void read(int &nr){
nr = 0;
while(buff[p] < '0' || buff[p] > '9')
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
while(buff[p] >= '0' && buff[p] <= '9'){
nr = 10 * nr + buff[p] - '0';
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
}
}
struct seg{
int st, dr, val;
bool operator < (const seg& other) const {
if(st < other.st)
return val + other.st - st > other.val;
return other.val + st - other.st < val;
}
};
int n, m, sol[1000100], nxt[2000100];
seg S[300100];
set <int> h;
bitset <5000100> viz;
int find(int p){
return (!viz[p] ? p : nxt[p] = find(nxt[p]));
}
int main(){
freopen("trade.in", "r", stdin);
cin >> n >> m;
for(register int i = 1; i <= m; i++)
read(S[i].st), read(S[i].dr), read(S[i].val);
sort(S + 1, S + m + 1);
for(register int i = 0; i <= n; i++)
nxt[i] = i + 1;
for(register int i = 1; i <= m; i++){
for(register int p = S[i].st; p <= S[i].dr; p = nxt[p]){
if(!viz[p]){
sol[p] = p - S[i].st + S[i].val;
viz[p] = 1;
}
}
find(S[i].st);
}
for(register int i = 1; i <= n; i++)
fprintf(out, "%d ", sol[i]);
return 0;
}