1+ /* *
2+ * @file 11109.cpp
3+ * @author Macesuted (i@macesuted.moe)
4+ * @date 2025-05-13
5+ *
6+ * @copyright Copyright (c) 2025
7+ *
8+ */
9+
10+ #include < bits/stdc++.h>
11+ using namespace std ;
12+
13+ #ifndef LOCAL
14+ #define endl ' \n '
15+ #endif
16+
17+ bool mem1;
18+
19+ #define maxn 300005
20+ #define maxsqrtn 600
21+
22+ using tiii = tuple<int , int , int >;
23+
24+ vector<tiii> upds[maxn];
25+ int64_t ans[maxsqrtn];
26+ int bel[maxn], ql[maxn], qr[maxn], a[maxn], delt[maxsqrtn], add[maxsqrtn];
27+ deque<int > cnt[maxsqrtn];
28+
29+ void solve (void ) {
30+ int n, m;
31+ cin >> n >> m;
32+ for (int i = 1 , x1, x2, y1, y2; i <= n; i++) {
33+ cin >> x1 >> x2 >> y1 >> y2;
34+ upds[x1].emplace_back (y1, y2 - 1 , +1 ), upds[x2].emplace_back (y1, y2 - 1 , -1 );
35+ }
36+
37+ int B = sqrt (n), Bcnt = 0 ;
38+ while (qr[Bcnt] < n) Bcnt++, ql[Bcnt] = qr[Bcnt - 1 ] + 1 , qr[Bcnt] = min (qr[Bcnt - 1 ] + B, n);
39+
40+ for (int i = 1 ; i <= Bcnt; i++) {
41+ cnt[i].push_back (0 );
42+ for (int j = ql[i]; j <= qr[i]; j++) cnt[bel[j] = i][a[j] = 0 ]++;
43+ }
44+
45+ for (int t = 1 ; t <= n; t++) {
46+ for (auto [l, r, v] : upds[t]) {
47+ if (bel[l] == bel[r]) {
48+ cnt[bel[l]].push_front (0 ), cnt[bel[l]].push_back (0 ), delt[bel[l]]--;
49+ for (int i = l; i <= r; i++) cnt[bel[i]][a[i] - delt[bel[l]]]--, a[i] += v, cnt[bel[i]][a[i] - delt[bel[l]]]++;
50+ continue ;
51+ }
52+
53+ cnt[bel[l]].push_front (0 ), cnt[bel[l]].push_back (0 ), delt[bel[l]]--;
54+ for (int i = l; i <= qr[bel[l]]; i++)
55+ cnt[bel[i]][a[i] - delt[bel[i]]]--, a[i] += v, cnt[bel[i]][a[i] - delt[bel[i]]]++;
56+
57+ for (int t = bel[l] + 1 ; t < bel[r]; t++) add[t] += v;
58+
59+ cnt[bel[r]].push_front (0 ), cnt[bel[r]].push_back (0 ), delt[bel[r]]--;
60+ for (int i = ql[bel[r]]; i <= r; i++)
61+ cnt[bel[i]][a[i] - delt[bel[i]]]--, a[i] += v, cnt[bel[i]][a[i] - delt[bel[i]]]++;
62+ }
63+ for (int b = 1 ; b <= Bcnt; b++) {
64+ while (cnt[b].front () == 0 ) cnt[b].pop_front (), delt[b]++;
65+ while (cnt[b].back () == 0 ) cnt[b].pop_back ();
66+ }
67+
68+ for (int b = 1 ; b <= Bcnt; b++)
69+ for (int v = (delt[b] + add[b] - 1 ) / m + 1 ; m * v - delt[b] - add[b] < (int )cnt[b].size (); v++)
70+ ans[v] += cnt[b][m * v - delt[b] - add[b]];
71+ }
72+
73+ for (int i = 1 ; i <= n / m; i++) cout << ans[i] << endl;
74+
75+ return ;
76+ }
77+
78+ bool mem2;
79+
80+ int main () {
81+ ios::sync_with_stdio (false ), cin.tie (nullptr );
82+ #ifdef LOCAL
83+ cerr << " Memory Cost: " << abs (&mem1 - &mem2) / 1024 . / 1024 . << " MB" << endl;
84+ #endif
85+
86+ int _ = 1 ;
87+ while (_--) solve ();
88+
89+ #ifdef LOCAL
90+ cerr << " Time Cost: " << clock () * 1000 . / CLOCKS_PER_SEC << " MS" << endl;
91+ #endif
92+ return 0 ;
93+ }
0 commit comments