Submission #957419

#TimeUsernameProblemLanguageResultExecution timeMemory
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...