#include <iostream> #define f first #define s second using namespace std; int a,b,c,d,e,f,l,k,p,w,n,m,pop,st[2097153],comp; // miej, kolor (minus to koniec) void ins(int pp, int kp, int ll) { pp+=comp; kp+=comp; while (pp<kp) { if (pp&1) { st[pp]*=ll; pp++; } if (!(kp&1)) { st[kp]*=ll; kp--; } pp>>=1; kp>>=1; } if (pp==kp) { st[pp]*=ll; } return; } int main() { scanf("%d%d", &n, &m); for (a=0; a!=2097153; a++) { st[a]=1; } comp=1; while (comp<n) { comp<<=1; } comp--; for (a=0; a!=m; a++) { scanf("%d%d%d", &p, &k, &l); if (l==3) { ins(p, k, 0); } if (l==2) { ins(p, k, 3); } if (l==1) { ins(p, k, 2); } } for (a=1; a<=comp+n; a++) { st[a]*=st[a>>1]; } for (a=comp+1; a<=comp+n; a++) { if (st[a]&&st[a]==(st[a]/6)*6) { w++; } } printf("%d", w); }
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 | #include <iostream> #define f first #define s second using namespace std; int a,b,c,d,e,f,l,k,p,w,n,m,pop,st[2097153],comp; // miej, kolor (minus to koniec) void ins(int pp, int kp, int ll) { pp+=comp; kp+=comp; while (pp<kp) { if (pp&1) { st[pp]*=ll; pp++; } if (!(kp&1)) { st[kp]*=ll; kp--; } pp>>=1; kp>>=1; } if (pp==kp) { st[pp]*=ll; } return; } int main() { scanf("%d%d", &n, &m); for (a=0; a!=2097153; a++) { st[a]=1; } comp=1; while (comp<n) { comp<<=1; } comp--; for (a=0; a!=m; a++) { scanf("%d%d%d", &p, &k, &l); if (l==3) { ins(p, k, 0); } if (l==2) { ins(p, k, 3); } if (l==1) { ins(p, k, 2); } } for (a=1; a<=comp+n; a++) { st[a]*=st[a>>1]; } for (a=comp+1; a<=comp+n; a++) { if (st[a]&&st[a]==(st[a]/6)*6) { w++; } } printf("%d", w); } |