Pagini recente » Cod sursa (job #424688) | Cod sursa (job #1677582) | Cod sursa (job #433876) | Cod sursa (job #836359) | Cod sursa (job #2270678)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[2005];
long long aib[2005];
inline void u(int p, int v){
for(int i = p; i <= n ; i = i + (i & (-i)))
aib[i] += v;
}
inline long long q(int p){
long long val = 0;
for(int i = p; i > 0 ; i = i - (i & (-i)))
val += aib[i];
return val;
}
struct usu{
int x, y, c;
bool operator < (const usu &aux)const{
if(x != aux.x) return x < aux.x;
return y < aux.y;
}
};
set <usu> s;
int main()
{
freopen("reconst.in", "r", stdin);
freopen("reconst.out", "w", stdout);
scanf("%d%d", &n, &m);
int x, y, c;
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d", &x, &y, &c);
s.insert({x, y, c});
}
set <usu> :: iterator it = s.begin();
while(it != s.end()){
set <usu> :: iterator it2 = next(it);
int x = it->x;
while(it2 != s.end()){
if(it2->x != x) break ;
int y = it2->y;
s.insert({it->y + 1, it2->y, it2->c - it->c});
s.erase(it2);
it2 = s.lower_bound({x, y, 0});
}
it = it2;
}
for(set <usu> :: reverse_iterator it = s.rbegin(); it != s.rend() ; ++it){
int val = q(it->y) - q(it->x - 1);
a[it->x] = it->c - val;
u(it->x, a[it->x]);
}
for(int i = 1; i <= n ; ++i)
printf("%d ", a[i]);
return 0;
}