제출 #1329555

#제출 시각아이디문제언어결과실행 시간메모리
1329555Faisal_SaqibTopovi (COCI15_topovi)C++20
120 / 120
980 ms52448 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <array>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef long double ld;
#define int ll
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,k=0,kp=0,p;
    cin>>n>>kp>>p;
    int ans=0;
    map<int,int> crow,ccol;
    map<int,int> xr,xc;
    map<int,int> row,col;
    map<pair<int,int>,int> st;
    auto add = [&](int x,int y,int v)
    {
        st[{x,y}]=v;
        ans-=(n-xc[row[x]]),xr[row[x]]--;
        crow[x]++;
        row[x]^=v;
        ans+=(n-xc[row[x]]),xr[row[x]]++;

        ans-=(n-xr[col[y]]),xc[col[y]]--;
        ccol[y]++;
        col[y]^=v;
        ans+=(n-xr[col[y]]),xc[col[y]]++;
    };
    auto del = [&](int x,int y,int v)
    {
        ans-=(n-xc[row[x]]),xr[row[x]]--;
        crow[x]--;
        if(crow[x]==0)crow.erase(x);
        row[x]^=v;
        ans+=(n-xc[row[x]]),xr[row[x]]++;

        ans-=(n-xr[col[y]]),xc[col[y]]--;
        ccol[y]--;
        if(ccol[y]==0)ccol.erase(y);
        col[y]^=v;
        ans+=(n-xr[col[y]]),xc[col[y]]++;
    };
    xc[0]=n;
    xr[0]=n;
    for(int i=0;i<kp;i++)
    {
        int x,y;
        int v;
        cin>>x>>y>>v;
        add(x,y,v);
    }
    for(int i=0;i<p;i++)
    {
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        int v=st[{x1,y1}];
        del(x1,y1,v);
        add(x2,y2,v);
        cout<<ans<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...