Submission #784646

#TimeUsernameProblemLanguageResultExecution timeMemory
784646ToniBChessboard (IZhO18_chessboard)C++17
47 / 100
2096 ms6860 KiB
#include <bits/stdc++.h> #define X first #define Y second using namespace std; const int MAXN = 1e5 + 5; const int OFF = 1 << 18; typedef long long ll; int n, k, tour[OFF]; vector<pair<int, int> > v[MAXN]; bool prop[OFF]; void propagate(int& x, int& l, int& r){ prop[x] = 0; tour[x] = r - l + 1 - tour[x]; if(l != r){ prop[x * 2 + 1] ^= 1; prop[x * 2 + 2] ^= 1; } } void upd(int x, int l, int r, int ql, int qr){ if(prop[x]) propagate(x, l, r); if(ql <= l && r <= qr){ prop[x] = 1; propagate(x, l, r); return ; } if(ql > r || l > qr) return ; int mid = (l + r) >> 1; upd(x * 2 + 1, l, mid, ql, qr); upd(x * 2 + 2, mid + 1, r, ql, qr); tour[x] = tour[x * 2 + 1] + tour[x * 2 + 2]; } inline ll solve(int& k){ ll ret = 5e9; for(int b = 0; b < 2; ++b){ memset(tour, 0, sizeof tour); memset(prop, 0, sizeof prop); ll cur = 0; for(int i = b * k; i < n; i += 2 * k){ upd(0, 0, n - 1, i, i + k - 1); } for(int i = 0; i < n; ++i){ for(pair<int, int>& p : v[i]){ upd(0, 0, n - 1, p.X, p.Y); } if(i % k == 0) upd(0, 0, n - 1, 0, n - 1); cur += tour[0]; } ret = min(ret, cur); } return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for(int i = 0; i < k; ++i){ int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; --x1, --y1, --x2, --y2; v[x1].push_back({y1, y2}); v[x2 + 1].push_back({y1, y2}); } ll ans = 5e9; for(int i = 1; i < n; ++i){ if(n % i == 0){ ans = min(ans, solve(i)); } } cout << ans; return 0; }
#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...