Submission #541973

# Submission time Handle Problem Language Result Execution time Memory
541973 2022-03-24T22:46:14 Z Olympia Topovi (COCI15_topovi) C++17
0 / 120
2000 ms 32868 KB
#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <cmath>
#include <map>
#include <random>
#include <cassert>
#include <ctime>
#include <cstdlib>
#include <limits.h>
#include <queue>

using namespace std;
const int MOD = 10007;
class DynamicThing {
    map<int,int64_t> oc1;
    map<int,int64_t> oc2;
public:
    int64_t tot = 0;
    void remove (int type, int index, int quantity) {
        if (type == 1) {
            tot -= oc1[index] * oc2[index];
            oc1[index] -= quantity;
            tot += oc1[index] * oc2[index];
        } else {
            tot -= oc1[index] * oc2[index];
            oc2[index] -= quantity;
            tot += oc1[index] * oc2[index];
        }
    }
    void add (int type, int index, int quantity) {
        if (type == 1) {
            tot -= oc1[index] * oc2[index];
            oc1[index] += quantity;
            tot += oc1[index] * oc2[index];
        } else {
            tot -= oc1[index] * oc2[index];
            oc2[index] += quantity;
            tot += oc1[index] * oc2[index];
        }
    }
};
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    map<int,int> row_xor;
    map<int,int> col_xor;
    int64_t N, K, P;
    cin >> N >> K >> P;
    DynamicThing dt;
    dt.add(1, 0, N);
    dt.add(2, 0, N);
    map<pair<int,int>,int> loc;
    for (int i = 0; i < N; i++) {
        int64_t r, c, x;
        cin >> r >> c >> x;
        dt.remove(1, row_xor[r], 1 );
        dt.remove(2, col_xor[c], 1);
        row_xor[r] ^= x;
        col_xor[c] ^= x;
        dt.add(1, (row_xor[r] ^= x), 1 );
        dt.add(2, (col_xor[c] ^= x), 1);
        loc[{r, c}] = x;
    }
    while (P--) {
        int64_t r1, c1, r2, c2;
        cin >> r1 >> c1 >> r2 >> c2;
        if (r1 != r2) {
            dt.remove(1, row_xor[r1], 1);
            dt.remove(1, row_xor[r2], 1);
            dt.add(1, row_xor[r1] ^= loc[{r1, c1}], 1);
            dt.add(1, row_xor[r2] ^= loc[{r1, c1}], 1 );
        }
        if (c1 != c2) {
            dt.remove(2, col_xor[c1], 1);
            dt.remove(2, col_xor[c2], 1);
            dt.add(2, col_xor[c1] ^= loc[{r1, c1}], 1);
            dt.add(2, col_xor[c2] ^= loc[{r1, c1}], 1);
        }
        loc[{r2, c2}] = loc[{r1, c1}];
        loc[{r1, c1}] = 0;
        cout << N * N - dt.tot << '\n';
    }
    //cout << dt.tot << '\n';

}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Incorrect 1 ms 340 KB Output isn't correct
3 Incorrect 1 ms 212 KB Output isn't correct
4 Incorrect 1 ms 212 KB Output isn't correct
5 Incorrect 1 ms 212 KB Output isn't correct
6 Incorrect 399 ms 5356 KB Output isn't correct
7 Incorrect 241 ms 4716 KB Output isn't correct
8 Incorrect 344 ms 3892 KB Output isn't correct
9 Incorrect 353 ms 3972 KB Output isn't correct
10 Incorrect 379 ms 4248 KB Output isn't correct
11 Execution timed out 2082 ms 32812 KB Time limit exceeded
12 Execution timed out 2092 ms 32736 KB Time limit exceeded
13 Execution timed out 2086 ms 32868 KB Time limit exceeded
14 Execution timed out 2076 ms 32712 KB Time limit exceeded
15 Execution timed out 2084 ms 32740 KB Time limit exceeded
16 Execution timed out 2088 ms 32788 KB Time limit exceeded
17 Execution timed out 2053 ms 32812 KB Time limit exceeded
18 Execution timed out 2096 ms 32816 KB Time limit exceeded
19 Execution timed out 2095 ms 32776 KB Time limit exceeded
20 Execution timed out 2086 ms 32724 KB Time limit exceeded