#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
#define pii pair<int,int>
#define vii vector<pair<int,int>>
#define vi vector<int>
#define pll pair<ll, ll>
#define all(x) (x).begin(),(x).end()
#define siz(x) (int)(x).size()
#define count_bits(x) __builtin_popcountll((x))
const ll M = 1e9+7;
const ll INF = 1e9;
//mt19937 mt;void random_start(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());}
//ll los(ll a, ll b) {return a + (mt() % (b-a+1));}
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
unordered_set<int> akt;
const int MAXN = 1e7 + 5;
int cnt[MAXN];
vi primes;
int wyn(int n){
if(siz(akt) == 0) return 0;
int mx = (siz(akt) != 0 ? 1 : 0);
for(auto k : primes){
if(k > 2 * n / siz(akt)) break;
int tmp = 0;
for(auto u : akt){
cnt[u % k]++;
tmp = max(tmp, cnt[u%k]);
}
mx = max(mx, tmp);
for(auto u : akt){
cnt[u%k]=0;
}
}
return mx;
}
int last[MAXN];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for(ll i = 2; i <= n+1; ++i){
if(last[i] != 0) continue;
last[i] = i;
primes.push_back(i);
for(ll j = i * i; j <= n+1; j += i){
last[j] = i;
}
}
int q;
cin >> q;
int a;
for(int i = 0; i < q; ++i){
cin >> a;
if(akt.find(a) != akt.end()){
akt.erase(a);
}
else{
akt.insert(a);
}
cout << wyn(n) << "\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 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; #define pii pair<int,int> #define vii vector<pair<int,int>> #define vi vector<int> #define pll pair<ll, ll> #define all(x) (x).begin(),(x).end() #define siz(x) (int)(x).size() #define count_bits(x) __builtin_popcountll((x)) const ll M = 1e9+7; const ll INF = 1e9; //mt19937 mt;void random_start(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());} //ll los(ll a, ll b) {return a + (mt() % (b-a+1));} typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; unordered_set<int> akt; const int MAXN = 1e7 + 5; int cnt[MAXN]; vi primes; int wyn(int n){ if(siz(akt) == 0) return 0; int mx = (siz(akt) != 0 ? 1 : 0); for(auto k : primes){ if(k > 2 * n / siz(akt)) break; int tmp = 0; for(auto u : akt){ cnt[u % k]++; tmp = max(tmp, cnt[u%k]); } mx = max(mx, tmp); for(auto u : akt){ cnt[u%k]=0; } } return mx; } int last[MAXN]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for(ll i = 2; i <= n+1; ++i){ if(last[i] != 0) continue; last[i] = i; primes.push_back(i); for(ll j = i * i; j <= n+1; j += i){ last[j] = i; } } int q; cin >> q; int a; for(int i = 0; i < q; ++i){ cin >> a; if(akt.find(a) != akt.end()){ akt.erase(a); } else{ akt.insert(a); } cout << wyn(n) << "\n"; } return 0; } |
English