제출 #957419

#제출 시각아이디문제언어결과실행 시간메모리
957419AriadnaTopovi (COCI15_topovi)C++14
0 / 120
1328 ms40368 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int MAX_ROOKS = 2e5; int main() { int n, k, p; cin >> n >> k >> p; map<int, int> xor_rows, xor_columns; map<int, int> cnt_rows, cnt_columns; cnt_rows[0] = cnt_columns[0] = n; map<pair<int, int>, int> rooks; ll total = 0; while (k--) { int r, c, x; cin >> r >> c >> x; rooks[{r, c}] = x; total -= n-cnt_columns[xor_rows[r]]; total -= n-cnt_rows[xor_columns[c]]; if (xor_rows[r] ^ xor_columns[c]) ++total; cnt_rows[xor_rows[r]]--; xor_rows[r] ^= rooks[{r, c}]; cnt_rows[xor_rows[r]]++; cnt_columns[xor_columns[c]]--; xor_columns[r] ^= rooks[{r, c}]; cnt_columns[xor_columns[c]]++; total += n-cnt_columns[xor_rows[r]]; total += n-cnt_rows[xor_columns[c]]; if (xor_rows[r] ^ xor_columns[c]) --total; } while (p--) { int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2; rooks[{r2, c2}] = rooks[{r1, c1}]; total -= n-cnt_columns[xor_rows[r1]]; total -= n-cnt_rows[xor_columns[c1]]; if (xor_rows[r1] ^ xor_columns[c1]) ++total; cnt_rows[xor_rows[r1]]--; xor_rows[r1] ^= rooks[{r1, c1}]; cnt_rows[xor_rows[r1]]++; cnt_columns[xor_columns[c1]]--; xor_columns[r1] ^= rooks[{r1, c1}]; cnt_columns[xor_columns[c1]]++; total += n-cnt_columns[xor_rows[r1]]; total += n-cnt_rows[xor_columns[c1]]; if (xor_rows[r1] ^ xor_columns[c1]) --total; total -= n-cnt_columns[xor_rows[r2]]; total -= n-cnt_rows[xor_columns[c2]]; if (xor_rows[r2] ^ xor_columns[c2]) ++total; cnt_rows[xor_rows[r2]]--; xor_rows[r2] ^= rooks[{r2, c2}]; cnt_rows[xor_rows[r2]]++; cnt_columns[xor_columns[c2]]--; xor_columns[c2] ^= rooks[{r2, c2}]; cnt_columns[xor_columns[c2]]++; total += n-cnt_columns[xor_rows[r2]]; total += n-cnt_rows[xor_columns[c2]]; if (xor_rows[r2] ^ xor_columns[c2]) --total; rooks.erase({r1, c1}); cout << total << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...