#include <bits/stdc++.h> using namespace std; int przedzial[2097155]; int n, m, x; void zmien(int l, int r, int k, int L, int R, int i){ if (i < 2*x && R >= l && r >= L){ if (l <= L && R <= r) przedzial[i] |= (1 << k); else { zmien(l, r, k, L, L + (R - L)/2, 2*i); zmien(l, r, k, L + (R - L)/2 + 1, R, 2*i + 1); } } } int oblicz(){ int c = 0; for (int i = 1; i <= x; i++){ przedzial[2*i] |= przedzial[i]; przedzial[2*i + 1] |= przedzial[i]; } for (int i = x; i < x + n; i++) if (przedzial[i] == 6) c++; return c; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; x = ceil(log2(n)); x = pow(2, x); for (int i = 0; i < m; i++){ int l, r, k; cin >> l >> r >> k; zmien(l, r, k, 1, x, 1); } cout << oblicz(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <bits/stdc++.h> using namespace std; int przedzial[2097155]; int n, m, x; void zmien(int l, int r, int k, int L, int R, int i){ if (i < 2*x && R >= l && r >= L){ if (l <= L && R <= r) przedzial[i] |= (1 << k); else { zmien(l, r, k, L, L + (R - L)/2, 2*i); zmien(l, r, k, L + (R - L)/2 + 1, R, 2*i + 1); } } } int oblicz(){ int c = 0; for (int i = 1; i <= x; i++){ przedzial[2*i] |= przedzial[i]; przedzial[2*i + 1] |= przedzial[i]; } for (int i = x; i < x + n; i++) if (przedzial[i] == 6) c++; return c; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; x = ceil(log2(n)); x = pow(2, x); for (int i = 0; i < m; i++){ int l, r, k; cin >> l >> r >> k; zmien(l, r, k, 1, x, 1); } cout << oblicz(); return 0; } |