#include <stdio.h>
struct wierz
{
int left;
int right;
int kolor;
};
struct wierz tree[2097153];
void init(void)
{
int w;
for(w=1048576;w<2097152;w++)
{
tree[w].left=1+w-1048576;
tree[w].right=1+w-1048576;
tree[w].kolor=0;
}
for(w=1048575;w>0;w--)
{
tree[w].left=tree[2*w].left;
tree[w].right=tree[2*w+1].right;
tree[w].kolor=0;
}
return;
}
void wgraj(int l,int r,int kol)
{
int b,bp,la;
la=l;
b=la+1048575;
while(la<=r)
{
while(b>=1 && tree[b].left==la && tree[b].right<=r) {bp=b; b/=2;}
b=bp;
tree[b].kolor = (tree[b].kolor | kol);
la=tree[b].right+1;
b=la+1048575;
}
return;
}
int finisz(void)
{
int w,L;
L=0;
for(w=1;w<1048576;w++)
{
tree[2*w].kolor=(tree[2*w].kolor | tree[w].kolor);
tree[2*w+1].kolor=(tree[2*w+1].kolor | tree[w].kolor);
}
for(w=1048576;w<2097152;w++)
if(tree[w].kolor==3) L++;
return L;
}
int main()
{
int n,m,l,r,k;
init();
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d %d",&l,&r,&k);
if(k==3) k=4;
wgraj(l,r,k);
}
printf("%d\n",finisz());
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 82 83 84 85 86 87 | #include <stdio.h> struct wierz { int left; int right; int kolor; }; struct wierz tree[2097153]; void init(void) { int w; for(w=1048576;w<2097152;w++) { tree[w].left=1+w-1048576; tree[w].right=1+w-1048576; tree[w].kolor=0; } for(w=1048575;w>0;w--) { tree[w].left=tree[2*w].left; tree[w].right=tree[2*w+1].right; tree[w].kolor=0; } return; } void wgraj(int l,int r,int kol) { int b,bp,la; la=l; b=la+1048575; while(la<=r) { while(b>=1 && tree[b].left==la && tree[b].right<=r) {bp=b; b/=2;} b=bp; tree[b].kolor = (tree[b].kolor | kol); la=tree[b].right+1; b=la+1048575; } return; } int finisz(void) { int w,L; L=0; for(w=1;w<1048576;w++) { tree[2*w].kolor=(tree[2*w].kolor | tree[w].kolor); tree[2*w+1].kolor=(tree[2*w+1].kolor | tree[w].kolor); } for(w=1048576;w<2097152;w++) if(tree[w].kolor==3) L++; return L; } int main() { int n,m,l,r,k; init(); scanf("%d %d",&n,&m); while(m--) { scanf("%d %d %d",&l,&r,&k); if(k==3) k=4; wgraj(l,r,k); } printf("%d\n",finisz()); return 0; } |
English