OI XXIV - kon

// https://szkopul.edu.pl/problemset/problem/oNnWY6ZuzzhvG-jCmijiXkIk/site/?key=statement
// OI XXIV (2 etap)

// Kontenery

#include <algorithm>
#include <iostream>
#include <map>
#include <math.h>
#include <set>
#include <unordered_map>
#include <vector>

constexpr int sizik = 100 * 1001;

int kont[sizik];

std::set<int> s;
std::unordered_map<int, int> temp_arr[sizik];

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n, k;
    std::cin >> n >> k;

    int prw_n = sqrt(n);

    prw_n *= 12;

    for (; k > 0; k--) {
        int a, l, d;
        std::cin >> a >> l >> d;

        if (l <= prw_n) {
            int curr = a;
            for (int i = 0; i < l; i++) {
                kont[curr]++;
                curr += d;
            }
        } else {
            s.insert(d);
            temp_arr[d][a]++;
            temp_arr[d][a + l * d]--;
        }
    }

    for (const auto& d : s) {
        for (int i = 0; i < d; i++) {
            kont[i] += temp_arr[d][i];
        }
        for (int i = d; i <= n; i++) {
            temp_arr[d][i] += temp_arr[d][i - d];

            kont[i] += temp_arr[d][i];
        }
    }

    for (int i = 1; i <= n; i++) {
        std::cout << kont[i] << ' ';
    }

    std::cout << '\n';

    return 0;
}