Submission #253317

#TimeUsernameProblemLanguageResultExecution timeMemory
253317VimmerTopovi (COCI15_topovi)C++14
0 / 120
1160 ms50008 KiB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("no-stack-protector")

#define F first
#define S second
#define sz(x) int(x.size())
#define pb push_back
#define pf push_front
#define N 10005
#define M ll(998244353)
#define inf 1e9 + 1e9

using namespace std;
//using namespace __gnu_pbds;

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef short int si;
typedef array <ll, 3> a3;
typedef array <ll, 4> a4;

//typedef tree <int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;


ll kolx, koly, ans;

map <pair <ll, ll>, ll> a;

unordered_map <ll, ll> rowk, colk, valx, valy, row, col;

void del(ll t, bool ob)
{
    ans -= kolx * koly;

    if (ob)
    {
        rowk[t]--;

        if (rowk[t] == 0) kolx++;
    }
    else
    {
        colk[t]--;

        if (colk[t] == 0) koly++;
    }

    ans += kolx * koly;
}

void add(ll t, bool ob)
{
    ans -= kolx * koly;

    if (ob)
    {
        rowk[t]++;

        if (rowk[t] == 1) kolx--;
    }
    else
    {
        colk[t]++;

        if (colk[t] == 1) koly--;
    }

    ans += kolx * koly;
}

void de(ll t, bool ob)
{
    if (ob)
    {
        ans -= valy[row[t]];

        valx[row[t]]--;
    }
    else
    {
        ans -= valx[col[t]];

        valy[col[t]]--;
    }
}

void ad(ll t, bool ob)
{
    if (ob)
    {
        ans += valy[row[t]];

        valx[row[t]]++;
    }
    else
    {
        ans += valx[col[t]];

        valy[col[t]]++;
    }
}

int main()
{
    //freopen("input.txt", "r", stdin); //freopen("output4.txt", "w", stdout);

    ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    ll n, k, p;

    cin >> n >> k >> p;

    kolx = n; koly = n; ans = n * n;

    for (ll i = 0; i < k; i++)
    {
        ll x, y, val;

        cin >> x >> y >> val;

        row[x] ^= val;

        col[y] ^= val;

        add(x, 1);

        add(y, 0);

        a[{x, y}] = val;
    }

    for (auto it : colk) valy[col[it.F]]++;

    for (auto it : rowk)
    {
        valx[row[it.F]]++;

        ans += valy[row[it.F]];
    }

    valx[0] = kolx;

    valy[0] = koly;

    for (; p > 0; p--)
    {
        ll x1, x2, y1, y2;

        cin >> x1 >> y1 >> x2 >> y2;

        del(x1, 1); del(y1, 0);

        add(x2, 1); add(y2, 0);

        ll val = a[{x2, y2}] = a[{x1, y1}];

        if (x1 != x2) de(x1, 1); de(x2, 1); if (y1 != y2) de(y1, 0); de(y2, 0);

        row[x1] ^= val; col[y1] ^= val; row[x2] ^= val; col[y2] ^= val;

        if (x1 != x2) ad(x1, 1); ad(x2, 1); if (y1 != y2) ad(y1, 0); ad(y2, 0);

        cout << n * n - ans << '\n';
    }
}

Compilation message (stderr)

topovi.cpp: In function 'int main()':
topovi.cpp:165:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
         if (x1 != x2) de(x1, 1); de(x2, 1); if (y1 != y2) de(y1, 0); de(y2, 0);
         ^~
topovi.cpp:165:34: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
         if (x1 != x2) de(x1, 1); de(x2, 1); if (y1 != y2) de(y1, 0); de(y2, 0);
                                  ^~
topovi.cpp:169:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
         if (x1 != x2) ad(x1, 1); ad(x2, 1); if (y1 != y2) ad(y1, 0); ad(y2, 0);
         ^~
topovi.cpp:169:34: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
         if (x1 != x2) ad(x1, 1); ad(x2, 1); if (y1 != y2) ad(y1, 0); ad(y2, 0);
                                  ^~
#Verdict Execution timeMemoryGrader output
Fetching results...