#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; } |
English