#include <bits/stdc++.h> using namespace std; const int TSIZE = 1 << 20; int tree[2 * TSIZE + 5]; void update(int l, int r, int k) { l += TSIZE; r += TSIZE; tree[l] |= k; tree[r] |= k; while(l/2 != r/2){ if(!(l&1)) tree[l + 1] |= k; if(r&1) tree[r - 1] |= k; l >>= 1; r >>= 1; } } int query(int i) { i += TSIZE; int res = 0; while(i >= 1){ res |= tree[i]; i >>= 1; } return (res == 3); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, l, r, k; cin >> n >> m; for(int i = 1; i <= m; i++){ cin >> l >> r >> k; if(k == 3) k++; update(l, r, k); } int cnt = 0; for(int i = 1; i <= n; i++) if(query(i)) cnt++; cout << cnt << '\n'; 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 43 44 45 46 47 48 49 | #include <bits/stdc++.h> using namespace std; const int TSIZE = 1 << 20; int tree[2 * TSIZE + 5]; void update(int l, int r, int k) { l += TSIZE; r += TSIZE; tree[l] |= k; tree[r] |= k; while(l/2 != r/2){ if(!(l&1)) tree[l + 1] |= k; if(r&1) tree[r - 1] |= k; l >>= 1; r >>= 1; } } int query(int i) { i += TSIZE; int res = 0; while(i >= 1){ res |= tree[i]; i >>= 1; } return (res == 3); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, l, r, k; cin >> n >> m; for(int i = 1; i <= m; i++){ cin >> l >> r >> k; if(k == 3) k++; update(l, r, k); } int cnt = 0; for(int i = 1; i <= n; i++) if(query(i)) cnt++; cout << cnt << '\n'; return 0; } |