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