#include <bits/stdc++.h> using namespace std; typedef long long ll; struct kolor { bool czer=false, zol =false, nieb=false; }; ll POCZ = 1<<20; bool drzewo[(1<<21)][3]; void dodaj(ll l, ll p, ll k)//k = {0(zolty), 1(niebieski, 2(czerwony)} { l+=POCZ; p+=POCZ; while(l<p) { if(l%2==1) { drzewo[l][k] = true; l++; } if(p%2==0) { drzewo[p][k] = true; p--; } l/=2;//przesuniecie w gore p/=2; } if(l==p) drzewo[l][k] = true; } kolor element(ll n)//{0(zolty), 1(niebieski, 2(czerwony)} { kolor ret; n+=POCZ; while(n>1) { if(drzewo[n][0]) ret.zol=true; if(drzewo[n][1]) ret.nieb=true; if(drzewo[n][2]) ret.czer=true; n/=2; } //jeszcze korzen trzeba dodac // n=1 if(drzewo[n][0]) ret.zol=true; if(drzewo[n][1]) ret.nieb=true; if(drzewo[n][2]) ret.czer=true; return ret; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n,m;//puszki, operacje cin>>n>>m; while(m--) { ll l,r,k; cin>>l>>r>>k; dodaj(l-1,r-1,k-1); } ll ilosc = 0; for(ll i = 0; i<n; i++) { kolor kol = element(i); //cout<<i<<": "<<kol.zol<<kol.nieb<<kol.czer<<endl; if(kol.czer==false && kol.nieb == true && kol.zol == true) ilosc++; } cout<<ilosc; }
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 78 79 80 81 82 83 84 85 86 87 | #include <bits/stdc++.h> using namespace std; typedef long long ll; struct kolor { bool czer=false, zol =false, nieb=false; }; ll POCZ = 1<<20; bool drzewo[(1<<21)][3]; void dodaj(ll l, ll p, ll k)//k = {0(zolty), 1(niebieski, 2(czerwony)} { l+=POCZ; p+=POCZ; while(l<p) { if(l%2==1) { drzewo[l][k] = true; l++; } if(p%2==0) { drzewo[p][k] = true; p--; } l/=2;//przesuniecie w gore p/=2; } if(l==p) drzewo[l][k] = true; } kolor element(ll n)//{0(zolty), 1(niebieski, 2(czerwony)} { kolor ret; n+=POCZ; while(n>1) { if(drzewo[n][0]) ret.zol=true; if(drzewo[n][1]) ret.nieb=true; if(drzewo[n][2]) ret.czer=true; n/=2; } //jeszcze korzen trzeba dodac // n=1 if(drzewo[n][0]) ret.zol=true; if(drzewo[n][1]) ret.nieb=true; if(drzewo[n][2]) ret.czer=true; return ret; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n,m;//puszki, operacje cin>>n>>m; while(m--) { ll l,r,k; cin>>l>>r>>k; dodaj(l-1,r-1,k-1); } ll ilosc = 0; for(ll i = 0; i<n; i++) { kolor kol = element(i); //cout<<i<<": "<<kol.zol<<kol.nieb<<kol.czer<<endl; if(kol.czer==false && kol.nieb == true && kol.zol == true) ilosc++; } cout<<ilosc; } |