// problem: https://sio2.mimuw.edu.pl/c/pa-2026-1/p/wdp/
// g++ wdp_brute.cpp && ./a.out < tests/by_me/1.in
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
using namespace std;
vector<int> sieve(int n)
{
// creation of boolean array
vector<bool> prime(n + 1, true);
for (int p = 2; p * p <= n; p++) {
if (prime[p] == true) {
// marking as false
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
vector<int> res;
for (int p = 2; p <= n; p++){
if (prime[p]){
res.push_back(p);
}
}
return res;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, q, d = 0, event_idx;
bool add;
cin >> n >> q;
vector<bool> game(n);
set<int> special_fields_idx;
vector<int> primes = sieve(n);
map<int, vector<int>> primes_modulo;
for (int prime: primes)
{
primes_modulo[prime] = vector<int>(prime);
}
for (int qq=0; qq<q; qq++)
{
cin >> event_idx;
if (game[event_idx-1])
{
game[event_idx-1] = false;
add = false;
}
else
{
game[event_idx-1] = true;
add = true;
}
int max_score = 0;
for (int k: primes)
{
if (add)
primes_modulo[k][event_idx%k]++;
else
primes_modulo[k][event_idx%k]--;
int max_in_prime = *std::max_element(
primes_modulo[k].begin(),
primes_modulo[k].end()
);
max_score = max(max_score, max_in_prime);
}
cout << max_score << endl;
}
}
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 | // problem: https://sio2.mimuw.edu.pl/c/pa-2026-1/p/wdp/ // g++ wdp_brute.cpp && ./a.out < tests/by_me/1.in #include <iostream> #include <algorithm> #include <vector> #include <map> #include <set> using namespace std; vector<int> sieve(int n) { // creation of boolean array vector<bool> prime(n + 1, true); for (int p = 2; p * p <= n; p++) { if (prime[p] == true) { // marking as false for (int i = p * p; i <= n; i += p) prime[i] = false; } } vector<int> res; for (int p = 2; p <= n; p++){ if (prime[p]){ res.push_back(p); } } return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, q, d = 0, event_idx; bool add; cin >> n >> q; vector<bool> game(n); set<int> special_fields_idx; vector<int> primes = sieve(n); map<int, vector<int>> primes_modulo; for (int prime: primes) { primes_modulo[prime] = vector<int>(prime); } for (int qq=0; qq<q; qq++) { cin >> event_idx; if (game[event_idx-1]) { game[event_idx-1] = false; add = false; } else { game[event_idx-1] = true; add = true; } int max_score = 0; for (int k: primes) { if (add) primes_modulo[k][event_idx%k]++; else primes_modulo[k][event_idx%k]--; int max_in_prime = *std::max_element( primes_modulo[k].begin(), primes_modulo[k].end() ); max_score = max(max_score, max_in_prime); } cout << max_score << endl; } } |
English