Submission #492355

#TimeUsernameProblemLanguageResultExecution timeMemory
492355RainbowbunnyChessboard (IZhO18_chessboard)C++17
31 / 100
2047 ms8956 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 5; int n, k; int xl[MAXN], xr[MAXN], yl[MAXN], yr[MAXN]; int ST[4 * MAXN], Lazy[4 * MAXN]; void Build(int node, int l, int r, int id) { Lazy[node] = 0; if(l == r) { ST[node] = ((l - 1) / id) & 1; return; } int mid = (l + r) >> 1; Build(node << 1, l, mid, id); Build(node << 1 | 1, mid + 1, r, id); ST[node] = ST[node << 1] + ST[node << 1 | 1]; } void Push(int node, int l, int r) { if(Lazy[node]) { ST[node] = (r - l + 1) - ST[node]; if(l != r) { Lazy[node << 1] ^= Lazy[node]; Lazy[node << 1 | 1] ^= Lazy[node]; } Lazy[node] = 0; } } void Update(int node, int l, int r, int L, int R) { Push(node, l, r); if(l > R or r < L or L > R) { return; } if(L <= l and r <= R) { Lazy[node] = 1; Push(node, l, r); return; } int mid = (l + r) >> 1; Update(node << 1, l, mid, L, R); Update(node << 1 | 1, mid + 1, r, L, R); ST[node] = ST[node << 1] + ST[node << 1 | 1]; } long long Solve(int id) { long long ans1 = 0, ans2 = 0; vector <pair <int, pair <int, int> > > Queries; for(int i = 1; i <= k; i++) { Queries.emplace_back(xl[i], make_pair(yl[i], yr[i])); Queries.emplace_back(xr[i] + 1, make_pair(yl[i], yr[i])); } for(int i = 1; i <= n; i++) { if(i % id == 0) { Queries.emplace_back(i + 1, make_pair(1, n)); } } sort(Queries.begin(), Queries.end()); int pt = 0; Build(1, 1, n, id); for(int i = 1; i <= n; i++) { while(pt < (int)Queries.size() and Queries[pt].first == i) { Update(1, 1, n, Queries[pt].second.first, Queries[pt].second.second); pt++; } ans1 += ST[1]; } pt = 0; Build(1, 1, n, id); Update(1, 1, n, 1, n); for(int i = 1; i <= n; i++) { while(pt < (int)Queries.size() and Queries[pt].first == i) { Update(1, 1, n, Queries[pt].second.first, Queries[pt].second.second); pt++; } ans2 += ST[1]; } // cout << ans1 << ' ' << ans2 << '\n'; return min(ans1, ans2); } int main() { // freopen("Input.txt", "r", stdin); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long ans = 1e18; cin >> n >> k; for(int i = 1; i <= k; i++) { cin >> xl[i] >> yl[i] >> xr[i] >> yr[i]; } for(int i = 1; i < n; i++) { if(n % i == 0) { ans = min(ans, Solve(i)); } } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...