#include<cstdio>
const int N=2*1048576;
int base;
struct kolor {
bool zol;
bool nie;
bool cze;
kolor() : zol(false),nie(false),cze(false) {}
kolor(int q) {
zol= false; nie=false; cze=false;
if(q==1) zol=true;
if(q==2) nie=true;
if(q==3) cze=true;
}
struct kolor& operator+=(const kolor& k) {
zol |= k.zol;
nie |= k.nie;
cze |= k.cze;
return *this;
}
} T[N];
void initT(int n) {
base=1;
while(base < n) base*=2;
for(int i=0; i< 2*base; ++i) T[i]=kolor();
}
void paint(int i, int j, kolor k) {
i+=base-1; j+=base-1;
T[i]+=k;
T[j]+=k;
while(i/2 != j/2) {
if(i%2==0) T[i+1]+=k;
if(j%2) T[j-1]+=k;
i/=2;
j/=2;
}
}
kolor get(int i) {
kolor k=kolor();
i+=base-1;
while( i > 0) {
k+=T[i];
i/=2;
}
return k;
}
int main() {
int n,m;
scanf("%d",&n);
scanf("%d",&m);
initT(n);
int l,r,k;
for(int j=0; j<m; ++j) {
scanf("%d %d %d",&l,&r,&k);
kolor kk=kolor(k);
paint(l,r,kk);
}
int counter = 0;
for(int j=1; j<=n; ++j) {
kolor k=get(j);
if(k.zol && k.nie && (!k.cze)) counter++;
}
printf("%d\n",counter);
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 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 | #include<cstdio> const int N=2*1048576; int base; struct kolor { bool zol; bool nie; bool cze; kolor() : zol(false),nie(false),cze(false) {} kolor(int q) { zol= false; nie=false; cze=false; if(q==1) zol=true; if(q==2) nie=true; if(q==3) cze=true; } struct kolor& operator+=(const kolor& k) { zol |= k.zol; nie |= k.nie; cze |= k.cze; return *this; } } T[N]; void initT(int n) { base=1; while(base < n) base*=2; for(int i=0; i< 2*base; ++i) T[i]=kolor(); } void paint(int i, int j, kolor k) { i+=base-1; j+=base-1; T[i]+=k; T[j]+=k; while(i/2 != j/2) { if(i%2==0) T[i+1]+=k; if(j%2) T[j-1]+=k; i/=2; j/=2; } } kolor get(int i) { kolor k=kolor(); i+=base-1; while( i > 0) { k+=T[i]; i/=2; } return k; } int main() { int n,m; scanf("%d",&n); scanf("%d",&m); initT(n); int l,r,k; for(int j=0; j<m; ++j) { scanf("%d %d %d",&l,&r,&k); kolor kk=kolor(k); paint(l,r,kk); } int counter = 0; for(int j=1; j<=n; ++j) { kolor k=get(j); if(k.zol && k.nie && (!k.cze)) counter++; } printf("%d\n",counter); return 0; } |
English