#include <bits/stdc++.h>
using namespace std;
int T[3000006];
void uak(int wierz, int pocz,int kon, int zpocz, int zkon, int kol){
if(zpocz>kon or zkon<pocz){
return;
}
if(zpocz<=pocz and zkon>=kon){
if(T[wierz]%kol!=0){
T[wierz]=(T[wierz]*kol);
}
return;
}
else{
uak(wierz*2,pocz,(kon+pocz)/2,zpocz,zkon,kol);
uak(wierz*2+1,(pocz+kon)/2+1,kon,zpocz,zkon,kol);
return;
}
}
bool wyp(int a,int b){
bool nieb = false;
bool zolt = false;
bool czerw = false;
if(T[a+b-1]%2==0){
zolt = true;
}
if(T[a+b-1]%3==0){
nieb = true;
}
if(T[a+b-1]%5==0){
czerw = true;
}
int i = a+b-1;
while(i>1){
i = i/2;
if(T[i]%2==0){
zolt = true;
}
if(T[i]%3==0){
nieb = true;
}
if(T[i]%5==0){
czerw = true;
}
}
if(zolt == true and nieb == true and czerw == false){
return true;
}
else{
return false;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
int l,r,k;
int b = int(pow(2,ceil(log2(double(n)))));
int dlug =b+b-1;
int kol;
//cout<<dlug<<endl;
for(int i=0;i<=dlug+5;i++){
T[i]=1;
}
for(int i=0;i<m;i++){
cin>>l>>r>>k;
if(k==1){
kol = 2;
}
else if(k==2){
kol = 3;
}
else if(k==3){
kol = 5;
}
uak(1,1,b,l,r,kol);
// for(int i=0;i<=dlug;i++){
// cout<<T[i]<<" ";
//}
//cout<<endl;
}
//cout<<endl;
//int wyn;
int il=0;
for(int i=1;i<=n;i++){
if(wyp(i,b)==true){
il++;
}
//cout<<wyn<<" ";
}
cout<<il<<"\n";
}
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 90 91 92 93 94 95 96 97 98 | #include <bits/stdc++.h> using namespace std; int T[3000006]; void uak(int wierz, int pocz,int kon, int zpocz, int zkon, int kol){ if(zpocz>kon or zkon<pocz){ return; } if(zpocz<=pocz and zkon>=kon){ if(T[wierz]%kol!=0){ T[wierz]=(T[wierz]*kol); } return; } else{ uak(wierz*2,pocz,(kon+pocz)/2,zpocz,zkon,kol); uak(wierz*2+1,(pocz+kon)/2+1,kon,zpocz,zkon,kol); return; } } bool wyp(int a,int b){ bool nieb = false; bool zolt = false; bool czerw = false; if(T[a+b-1]%2==0){ zolt = true; } if(T[a+b-1]%3==0){ nieb = true; } if(T[a+b-1]%5==0){ czerw = true; } int i = a+b-1; while(i>1){ i = i/2; if(T[i]%2==0){ zolt = true; } if(T[i]%3==0){ nieb = true; } if(T[i]%5==0){ czerw = true; } } if(zolt == true and nieb == true and czerw == false){ return true; } else{ return false; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; int l,r,k; int b = int(pow(2,ceil(log2(double(n))))); int dlug =b+b-1; int kol; //cout<<dlug<<endl; for(int i=0;i<=dlug+5;i++){ T[i]=1; } for(int i=0;i<m;i++){ cin>>l>>r>>k; if(k==1){ kol = 2; } else if(k==2){ kol = 3; } else if(k==3){ kol = 5; } uak(1,1,b,l,r,kol); // for(int i=0;i<=dlug;i++){ // cout<<T[i]<<" "; //} //cout<<endl; } //cout<<endl; //int wyn; int il=0; for(int i=1;i<=n;i++){ if(wyp(i,b)==true){ il++; } //cout<<wyn<<" "; } cout<<il<<"\n"; } |
English