Pagini recente » Cod sursa (job #2286632) | Cod sursa (job #2446148) | Cod sursa (job #936269) | Cod sursa (job #3205632) | Cod sursa (job #2021242)
#include <bits/stdc++.h>
#define r first
#define val second
const int MAXN = (int) 2e3;
struct Query {
int l, r;
int val;
bool operator <(const Query &other) const {
if(l == other.l)
return r < other.r;
return l < other.l;
}
};
std::multiset <Query> mst;
std::pair <int, int> pos[MAXN + 1];
int sol[MAXN + 1];
int main() {
FILE *fi, *fout;
int i, j, n, m, l, r, val;
fi = fopen("reconst.in" ,"r");
fout = fopen("reconst.out" ,"w");
fscanf(fi,"%d %d " ,&n,&m);
for(i = 1; i <= m; i++) {
fscanf(fi,"%d %d %d " ,&l,&r,&val);
mst.insert({l, r, val});
}
for(i = 1; i <= n; i++) {
std::multiset <Query> :: iterator it = mst.begin();
if(it -> l == i) {
Query aux = *it;
it++;
while(it != mst.end() && it -> l == i) {
if(it -> r != aux.r && aux.r < n) {
mst.insert({aux.r + 1, it -> r, it -> val - aux.val});
}
it++;
}
it = mst.begin();
pos[i] = {it -> r, it -> val};
while(!mst.empty() && mst.begin() -> l == i)
mst.erase(mst.begin());
}
}
for(i = n; i >= 1; i--) {
if(pos[i].r > 0) {
int sum = 0;
for(j = i + 1; j <= pos[i].r; j++)
sum += sol[j];
sol[i] = pos[i].val - sum;
}
}
for(i = 1; i <= n; i++)
fprintf(fout,"%d " ,sol[i]);
fclose(fi);
fclose(fout);
return 0;
}