#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <set>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
vector<bool> czyJestKamien(n, false);
vector<int> zap(q);
for (int i = 0; i < q; i++)
cin >> zap[i];
int mini = n;
vector<int> pierwsze;
vector<bool> czyPierwsza(mini + 1, true);
set <int> pozKamieni;
czyPierwsza[0] = czyPierwsza[1] = false;
for (int i = 2; i * i <= mini; i++)
{
if (czyPierwsza[i])
{
for (int j = i * i; j <= mini; j += i)
czyPierwsza[j] = false;
}
}
for (int i = 2; i <= mini; i++)
if (czyPierwsza[i])
pierwsze.push_back(i);
for (int i = 0; i < q; i++)
{
int x = zap[i] - 1;
if (czyJestKamien[x]) {
auto it = pozKamieni.find(x);
pozKamieni.erase(*it);
czyJestKamien[x] = false;
} else {
pozKamieni.insert(x);
czyJestKamien[x] = true;
}
if (pozKamieni.empty())
{
cout << "0\n";
continue;
}
if (pozKamieni.size() == 1)
{
cout << "1\n";
continue;
}
int wyn = 0;
for (int k = 0; k < pierwsze.size() && pierwsze[k] <= 2*n/(int)pozKamieni.size(); k++)
{
unordered_map<int, int> ile;
for (auto poz : pozKamieni)
{
ile[poz % pierwsze[k]]++;
wyn = max(wyn, ile[poz % pierwsze[k]]);
}
}
cout << wyn << "\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 | #include <iostream> #include <algorithm> #include <vector> #include <unordered_map> #include <set> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; vector<bool> czyJestKamien(n, false); vector<int> zap(q); for (int i = 0; i < q; i++) cin >> zap[i]; int mini = n; vector<int> pierwsze; vector<bool> czyPierwsza(mini + 1, true); set <int> pozKamieni; czyPierwsza[0] = czyPierwsza[1] = false; for (int i = 2; i * i <= mini; i++) { if (czyPierwsza[i]) { for (int j = i * i; j <= mini; j += i) czyPierwsza[j] = false; } } for (int i = 2; i <= mini; i++) if (czyPierwsza[i]) pierwsze.push_back(i); for (int i = 0; i < q; i++) { int x = zap[i] - 1; if (czyJestKamien[x]) { auto it = pozKamieni.find(x); pozKamieni.erase(*it); czyJestKamien[x] = false; } else { pozKamieni.insert(x); czyJestKamien[x] = true; } if (pozKamieni.empty()) { cout << "0\n"; continue; } if (pozKamieni.size() == 1) { cout << "1\n"; continue; } int wyn = 0; for (int k = 0; k < pierwsze.size() && pierwsze[k] <= 2*n/(int)pozKamieni.size(); k++) { unordered_map<int, int> ile; for (auto poz : pozKamieni) { ile[poz % pierwsze[k]]++; wyn = max(wyn, ile[poz % pierwsze[k]]); } } cout << wyn << "\n"; } return 0; } |
English