#include <bits/stdc++.h>
using namespace std;
const int M = (1<<4);
struct node{
bool farbe[4];
node (){
farbe[0] = false; farbe[1] = false; farbe[2] = false; farbe[3] = false;
}
};
int n, m;
node tree[2*M];
void update (int lewy, int prawy, int kolor){
lewy += M;
prawy += M;
tree[lewy].farbe[kolor] = true;
if (lewy != prawy) tree[prawy].farbe[kolor] = true;
while (lewy/2 != prawy/2){
if (lewy%2 == 0) tree[lewy+1].farbe[kolor] = true;
if (prawy%2 == 1) tree[prawy-1].farbe[kolor] = true;
lewy/=2;
prawy/=2;
}
}
/*bool ask_if_green (int poz){
bool ans_gelb = false, ans_blue = false, ans_red = false;
poz += M;
while (poz){
if (tree[poz].farbe[1]) ans_gelb = true;
if (tree[poz].farbe[2]) ans_blue = true;
if (tree[poz].farbe[3]) ans_red = true;
poz/=2;
}
if (ans_gelb && ans_blue && !ans_red) return true;
else return false;
}*/
void ustaw (){
for (int i = 2; i < 2*M; i++){
for (int j=1; j<=3; j++){
if (tree[i/2].farbe[j]) tree[i].farbe[j] = true;
}
}
}
int main (){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 0; i<m; i++){
int l, r, k;
cin>>l>>r>>k;
update(l, r, k);
}
ustaw();
int ans = 0;
for (int i=M; i<=n+M; i++){
if (tree[i].farbe[1] && tree[i].farbe[2] && !tree[i].farbe[3]) ans++;
}
cout << ans << "\n";
}
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <bits/stdc++.h> using namespace std; const int M = (1<<4); struct node{ bool farbe[4]; node (){ farbe[0] = false; farbe[1] = false; farbe[2] = false; farbe[3] = false; } }; int n, m; node tree[2*M]; void update (int lewy, int prawy, int kolor){ lewy += M; prawy += M; tree[lewy].farbe[kolor] = true; if (lewy != prawy) tree[prawy].farbe[kolor] = true; while (lewy/2 != prawy/2){ if (lewy%2 == 0) tree[lewy+1].farbe[kolor] = true; if (prawy%2 == 1) tree[prawy-1].farbe[kolor] = true; lewy/=2; prawy/=2; } } /*bool ask_if_green (int poz){ bool ans_gelb = false, ans_blue = false, ans_red = false; poz += M; while (poz){ if (tree[poz].farbe[1]) ans_gelb = true; if (tree[poz].farbe[2]) ans_blue = true; if (tree[poz].farbe[3]) ans_red = true; poz/=2; } if (ans_gelb && ans_blue && !ans_red) return true; else return false; }*/ void ustaw (){ for (int i = 2; i < 2*M; i++){ for (int j=1; j<=3; j++){ if (tree[i/2].farbe[j]) tree[i].farbe[j] = true; } } } int main (){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i<m; i++){ int l, r, k; cin>>l>>r>>k; update(l, r, k); } ustaw(); int ans = 0; for (int i=M; i<=n+M; i++){ if (tree[i].farbe[1] && tree[i].farbe[2] && !tree[i].farbe[3]) ans++; } cout << ans << "\n"; } |
English