#include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; int licz=1; int n_pocz=n; while(licz<n){ licz=licz*2; } n=licz; int drzewo[2*n][3]; for(int i=0;i<2*n;i++){ drzewo[i][0]=0; drzewo[i][1]=0; drzewo[i][2]=0; } for(int i=0;i<m;i++){ int l,r,k; cin>>l>>r>>k; if (l!=r-1){ while(l<r){ int liczba=r-l+1; int ojc=l+n-1; int x=1; int ind_x=0; int licznik=1; int ind_l=0; while((l-1)%x==0 && x<=liczba){ x=x*2; ind_x++; } x=x/2; //cout<<x<<endl; while(liczba>licznik && licznik<x ){ licznik=licznik*2; ind_l++; } for(int j=0;j<ind_l;j++){ ojc=ojc/2; } drzewo[ojc][k-1]=1; if (licznik>1){ l=l+licznik; } else{ l=l+1; } } } else if(l%2==1 && r>l){ drzewo[(l+n-1)/2][k-1]=1; } else if(l%2==0 && r>l){ drzewo[l+n-1][k-1]=1; drzewo[r+n-1][k-1]=1; } if(l==r){ drzewo[l+n-1][k-1]=1; } } int ziel=0; for(int i=0;i<n_pocz;i++){ int x=i+n; int a=0,b=0,c=0; while(x>0){ if(drzewo[x][0]==1){ a=1; } if(drzewo[x][1]==1){ b=1; } if(drzewo[x][2]==1){ c=1; } x=x/2; } if(a==1 && b==1 && c==0){ ziel++; } } cout<<ziel; }
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 88 89 | #include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; int licz=1; int n_pocz=n; while(licz<n){ licz=licz*2; } n=licz; int drzewo[2*n][3]; for(int i=0;i<2*n;i++){ drzewo[i][0]=0; drzewo[i][1]=0; drzewo[i][2]=0; } for(int i=0;i<m;i++){ int l,r,k; cin>>l>>r>>k; if (l!=r-1){ while(l<r){ int liczba=r-l+1; int ojc=l+n-1; int x=1; int ind_x=0; int licznik=1; int ind_l=0; while((l-1)%x==0 && x<=liczba){ x=x*2; ind_x++; } x=x/2; //cout<<x<<endl; while(liczba>licznik && licznik<x ){ licznik=licznik*2; ind_l++; } for(int j=0;j<ind_l;j++){ ojc=ojc/2; } drzewo[ojc][k-1]=1; if (licznik>1){ l=l+licznik; } else{ l=l+1; } } } else if(l%2==1 && r>l){ drzewo[(l+n-1)/2][k-1]=1; } else if(l%2==0 && r>l){ drzewo[l+n-1][k-1]=1; drzewo[r+n-1][k-1]=1; } if(l==r){ drzewo[l+n-1][k-1]=1; } } int ziel=0; for(int i=0;i<n_pocz;i++){ int x=i+n; int a=0,b=0,c=0; while(x>0){ if(drzewo[x][0]==1){ a=1; } if(drzewo[x][1]==1){ b=1; } if(drzewo[x][2]==1){ c=1; } x=x/2; } if(a==1 && b==1 && c==0){ ziel++; } } cout<<ziel; } |