Submission #407212

# Submission time Handle Problem Language Result Execution time Memory
407212 2021-05-18T16:10:26 Z LptN21 Topovi (COCI15_topovi) C++14
120 / 120
1247 ms 33648 KB
#include <bits/stdc++.h>
using namespace std;
#define fastIO ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define FF first
#define SS second
#define pb push_back
#define sz(x) (int)x.size()
#define oo 1e9
#define eps 1e-9
#define PI acos(-1.0)
#define lb lower_bound
#define ub upper_bound
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> ii;
const int N = 1e5+7, M=13+7;
const int MOD = 1e9+7;

int n, m, k, t;
ll ans=0;
map<int, int> rx, cx;
map<int, int> slr, slc;
map<ii, int> rook;

void mv(int r, int c, int v) {
    ans-=t-slr[cx[c]], ans-=t-slc[rx[r]];
    if(rx[r]!=cx[c]) ans+=1;
    slr[rx[r]]--, slc[cx[c]]--;
    rx[r]^=v, cx[c]^=v;
    slr[rx[r]]++, slc[cx[c]]++;
    ans+=t-slr[cx[c]], ans+=t-slc[rx[r]];
    if(rx[r]!=cx[c]) ans-=1;
    rook[ii(r, c)]^=v;
}

signed main() {
    //freopen("test.inp", "r", stdin);
    //freopen("test.out", "w", stdout);
    //fastIO;
    scanf("%d%d%d", &t, &n, &m);
    int x, y, u, v;slr[0]=slc[0]=t;
    for(int i=1;i<=n;i++) {
        scanf("%d%d%d", &x, &y, &k);
        mv(x, y, k);
    }
    for(int w, i=1;i<=m;i++) {
        scanf("%d%d%d%d", &x, &y, &u, &v);
        w=rook[ii(x, y)];
        mv(x, y, w), mv(u, v, w);
        printf("%lld\n", ans);
    }
    return 0;
}
/* stuff you should look for
    - int overflow, array bounds
    - special cases (n=1?)
    - do smth instead of do nothing and stay organized
    - WRITE STUFF DOWN
    - DONT JUST STICK ON ONE APPROACH
*/

Compilation message

topovi.cpp: In function 'int main()':
topovi.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |     scanf("%d%d%d", &t, &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
topovi.cpp:43:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |         scanf("%d%d%d", &x, &y, &k);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
topovi.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         scanf("%d%d%d%d", &x, &y, &u, &v);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 2 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 137 ms 5228 KB Output is correct
7 Correct 107 ms 4732 KB Output is correct
8 Correct 87 ms 3880 KB Output is correct
9 Correct 89 ms 3948 KB Output is correct
10 Correct 100 ms 4076 KB Output is correct
11 Correct 1183 ms 33308 KB Output is correct
12 Correct 1208 ms 33648 KB Output is correct
13 Correct 1247 ms 33600 KB Output is correct
14 Correct 1217 ms 33512 KB Output is correct
15 Correct 1205 ms 33472 KB Output is correct
16 Correct 1206 ms 33540 KB Output is correct
17 Correct 1224 ms 33332 KB Output is correct
18 Correct 1238 ms 33604 KB Output is correct
19 Correct 1206 ms 33400 KB Output is correct
20 Correct 1204 ms 33364 KB Output is correct