#include <bits/stdc++.h>
using namespace std;
const int MAX_N=10000005;
const int B=400;
bool is[B+1];
vector<int> primes;
int* counts[100];
int* freqs[100];
int res[100];
bool stone[MAX_N];
void sieve()
{
for(int i=2; i<=B; i++)
{
is[i]=true;
}
for(int p=2; p<=B; p++)
{
if(is[p])
{
primes.push_back(p);
for(int i=p*p; i<=B; i+=p)
{
is[i]=false;
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,q;
cin>>n>>q;
sieve();
int num=primes.size();
for(int i=0; i<num; i++)
{
int p=primes[i];
counts[i]=new int[p]();
int possible=(n+p-1)/p;
freqs[i]=new int[possible+1]();
freqs[i][0]=p;
res[i]=0;
}
while(q--)
{
int a;
cin>>a;
if(!stone[a])
{
stone[a]=true;
for(int i=0; i<num; i++)
{
int p=primes[i];
int r=a%p;
int& c=counts[i][r];
freqs[i][c]--;
c++;
freqs[i][c]++;
if(c>res[i])
{
res[i]=c;
}
}
}
else
{
stone[a]=false;
for(int i=0; i<num; i++)
{
int p=primes[i];
int r=a%p;
int& c=counts[i][r];
freqs[i][c]--;
if(c==res[i] && freqs[i][c]==0)
{
res[i]--;
}
c--;
freqs[i][c]++;
}
}
int global=0;
for(int i=0; i<num; i++)
{
if(res[i]>global)
{
global=res[i];
}
}
cout<<global<<endl;
}
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | #include <bits/stdc++.h> using namespace std; const int MAX_N=10000005; const int B=400; bool is[B+1]; vector<int> primes; int* counts[100]; int* freqs[100]; int res[100]; bool stone[MAX_N]; void sieve() { for(int i=2; i<=B; i++) { is[i]=true; } for(int p=2; p<=B; p++) { if(is[p]) { primes.push_back(p); for(int i=p*p; i<=B; i+=p) { is[i]=false; } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,q; cin>>n>>q; sieve(); int num=primes.size(); for(int i=0; i<num; i++) { int p=primes[i]; counts[i]=new int[p](); int possible=(n+p-1)/p; freqs[i]=new int[possible+1](); freqs[i][0]=p; res[i]=0; } while(q--) { int a; cin>>a; if(!stone[a]) { stone[a]=true; for(int i=0; i<num; i++) { int p=primes[i]; int r=a%p; int& c=counts[i][r]; freqs[i][c]--; c++; freqs[i][c]++; if(c>res[i]) { res[i]=c; } } } else { stone[a]=false; for(int i=0; i<num; i++) { int p=primes[i]; int r=a%p; int& c=counts[i][r]; freqs[i][c]--; if(c==res[i] && freqs[i][c]==0) { res[i]--; } c--; freqs[i][c]++; } } int global=0; for(int i=0; i<num; i++) { if(res[i]>global) { global=res[i]; } } cout<<global<<endl; } return 0; } |
English