Submission #407217

# Submission time Handle Problem Language Result Execution time Memory
407217 2021-05-18T16:20:02 Z LptN21 Topovi (COCI15_topovi) C++14
120 / 120
656 ms 32712 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<ii, int> rook;
unordered_map<int, int> rx, cx, slc, slr;

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);
    slr[0]=slc[0]=t;
    int x, y, u, v;
    for(int i=1;i<=n;mv(x, y, k), i++)
        scanf("%d%d%d", &x, &y, &k);
    for(int i=1;i<=m;i++) {
        scanf("%d%d%d%d", &x, &y, &u, &v);
        k=rook[ii(x, y)];
        mv(x, y, k), mv(u, v, k);
        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:39:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |     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:45:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |         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 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 57 ms 4940 KB Output is correct
7 Correct 45 ms 4476 KB Output is correct
8 Correct 38 ms 3856 KB Output is correct
9 Correct 37 ms 3956 KB Output is correct
10 Correct 41 ms 3984 KB Output is correct
11 Correct 642 ms 32560 KB Output is correct
12 Correct 612 ms 32660 KB Output is correct
13 Correct 614 ms 32652 KB Output is correct
14 Correct 635 ms 32560 KB Output is correct
15 Correct 638 ms 32664 KB Output is correct
16 Correct 655 ms 32712 KB Output is correct
17 Correct 616 ms 32552 KB Output is correct
18 Correct 640 ms 32644 KB Output is correct
19 Correct 639 ms 32660 KB Output is correct
20 Correct 656 ms 32584 KB Output is correct