제출 #98622

#제출 시각아이디문제언어결과실행 시간메모리
98622tieunhiTopovi (COCI15_topovi)C++14
120 / 120
1825 ms34808 KiB
#include <bits/stdc++.h> #define FOR(i, u, v) for (int i = u; i <= v; i++) #define FORD(i, v, u) for (int i = v; i >= u; i--) #define pii pair<int, int> #define mp make_pair #define F first #define S second #define PB push_back #define N 100005 #define mod 1000000007 #define ll long long using namespace std; map<int, int> row, col, cntR, cntC; map<pii, int> dd; ll res; int sz, n, numQ; void update(int u, int v, int sign) { res += sign*cntC[row[u]]; res += sign*cntR[col[v]]; if (row[u] == col[v]) res -= sign; } void upd(int u, int v, int w) { update(u, v, -1); cntR[row[u]]--; cntC[col[v]]--; row[u] ^= w; col[v] ^= w; cntR[row[u]]++; cntC[col[v]]++; update(u, v, 1); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("INP.TXT", "r", stdin); cin >> sz >> n >> numQ; res = 1ll*sz*sz; cntR[0] = cntC[0] = sz; FOR(i, 1, n) { int u, v, w; cin >> u >> v >> w; upd(u, v, w); dd[mp(u, v)] = w; } //cout <<res<<'\n'; while (numQ--) { int u, v, x, y; cin >> u >> v >> x >> y; int w = dd[mp(u, v)]; dd[mp(u, v)] = 0; dd[mp(x, y)] = w; upd(u, v, w); upd(x, y, w); cout <<1ll*sz*sz -res<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...