#include <iostream>
#include <vector>
#include <set>
using namespace std;
const int stala=1e7+10;
int tab[stala];
int mod[stala];
vector<int>moduly;
vector<int>tablica;
set<int>s;
set<int>do_zrobienia;
void sito(int ile)
{
for(int i=2;i<=ile;i++){
if(tab[i]==0){
for(int j=2*i;j<=ile;j+=i){
tab[j]=i;
}
}
}
}
void dzielniki(int x)
{
while(tab[x]!=0){
do_zrobienia.insert(tab[x]);
x/=tab[x];
}
do_zrobienia.insert(x);
}
int licz()
{
tablica.clear();
do_zrobienia.clear();
do_zrobienia.insert(2);
auto it=s.begin();
while(it!=s.end()){
int x=*it;
tablica.push_back(x);
it++;
if(it!=s.end()){
int x2=*it;
if(x2-x>1){
dzielniki(x2-x);
}
}
}
auto it2=do_zrobienia.begin();
int wynik=0;
while(it2!=do_zrobienia.end()){
int x=*it2;
for(int i=0;i<(int)tablica.size();i++){
mod[tablica[i]%x]++;
wynik=max(wynik,mod[tablica[i]%x]);
moduly.push_back(tablica[i]%x);
}
it2++;
for(int i=0;i<(int)moduly.size();i++){
mod[moduly[i]]=0;
}
moduly.clear();
}
return wynik;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int ile,q;
cin>>ile>>q;
sito(ile);
for(int i=1;i<=q;i++){
int x;
cin>>x;
if(s.find(x)==s.end()){
s.insert(x);
}
else{
s.erase(x);
}
cout<<licz()<<"\n";
}
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 <iostream> #include <vector> #include <set> using namespace std; const int stala=1e7+10; int tab[stala]; int mod[stala]; vector<int>moduly; vector<int>tablica; set<int>s; set<int>do_zrobienia; void sito(int ile) { for(int i=2;i<=ile;i++){ if(tab[i]==0){ for(int j=2*i;j<=ile;j+=i){ tab[j]=i; } } } } void dzielniki(int x) { while(tab[x]!=0){ do_zrobienia.insert(tab[x]); x/=tab[x]; } do_zrobienia.insert(x); } int licz() { tablica.clear(); do_zrobienia.clear(); do_zrobienia.insert(2); auto it=s.begin(); while(it!=s.end()){ int x=*it; tablica.push_back(x); it++; if(it!=s.end()){ int x2=*it; if(x2-x>1){ dzielniki(x2-x); } } } auto it2=do_zrobienia.begin(); int wynik=0; while(it2!=do_zrobienia.end()){ int x=*it2; for(int i=0;i<(int)tablica.size();i++){ mod[tablica[i]%x]++; wynik=max(wynik,mod[tablica[i]%x]); moduly.push_back(tablica[i]%x); } it2++; for(int i=0;i<(int)moduly.size();i++){ mod[moduly[i]]=0; } moduly.clear(); } return wynik; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int ile,q; cin>>ile>>q; sito(ile); for(int i=1;i<=q;i++){ int x; cin>>x; if(s.find(x)==s.end()){ s.insert(x); } else{ s.erase(x); } cout<<licz()<<"\n"; } return 0; } |
English