Submission #1369746

#TimeUsernameProblemLanguageResultExecution timeMemory
1369746ereringSeats (IOI18_seats)C++20
25 / 100
4106 ms228064 KiB
#include <bits/stdc++.h>
#include "seats.h"
using namespace std;
#define pb push_back
std::vector<int> r,c;
const int MAXN=1e6+6;
int h,w;
set<int> rw[MAXN],co[MAXN];
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
    r=R; h=H; w=W;
    c=C;
    for(int i=0;i<R.size();i++){
        rw[R[i]].insert(i);
        co[C[i]].insert(i);
    }
}

int swap_seats(int a, int b) {
    if(a>b)swap(a,b);
    rw[r[a]].erase(a); co[c[a]].erase(a);
    rw[r[b]].erase(b); co[c[b]].erase(b);
    swap(r[a],r[b]); swap(c[a],c[b]);
    rw[r[a]].insert(a); co[c[a]].insert(a);
    rw[r[b]].insert(b); co[c[b]].insert(b);

    vector<pair<int,pair<int,bool>>> pos;
    //for(int i=0;i<h && b==3;i++)cout<<*rw[i].begin()<<endl;
    //for(int i=0;i<w && b==3;i++)cout<<*co[i].begin()<<endl;
    for(int i=0;i<h;i++)pos.pb({*rw[i].begin(),{i,0}});
    for(int i=0;i<w;i++)pos.pb({*co[i].begin(),{i,1}});
    sort(pos.begin(),pos.end());
    int ans=1,mnr=1e9,mxr=-1e9,mnc=1e9,mxc=-1e9;
    for(int i=0;i<pos.size();i++){
       // cout<<pos[i].first<<' '<<po
        if(i && pos[i].first!=pos[i-1].first && (mxr-mnr+1)*(mxc-mnc+1)==pos[i].first)ans++;
        if(pos[i].second.second){
            mnr=min(mnr,pos[i].second.first);
            mxr=max(mxr,pos[i].second.first);
        }
        else{
            mnc=min(mnc,pos[i].second.first);
            mxc=max(mxc,pos[i].second.first);
        }
    }
    return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...