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