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