This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
set<int> rw[5001],cl[5001];
vector<int> r,c;
int h,w;
void give_initial_chart(int H, int W, vector<int> R, vector<int> C){
    h = H;
    w = W;
    for(int i = 0;i<H*W;i++){
        r.push_back(R[i]);
        c.push_back(C[i]);
        rw[R[i]].insert(i);
        cl[C[i]].insert(i);
    }
}
int swap_seats(int a, int b){
    rw[r[a]].erase(a);
    cl[c[a]].erase(a);
    rw[r[b]].erase(b);
    cl[c[b]].erase(b);
    rw[r[b]].insert(a);
    cl[c[b]].insert(a);
    rw[r[a]].insert(b);
    cl[c[a]].insert(b);
    swap(r[a],r[b]);
    swap(c[a],c[b]);
    vector<array<int,3>> ev;
    for(int i = 0;i<h;i++){
        ev.push_back({*rw[i].begin(),i,0});
    }
    for(int i = 0;i<w;i++){
        ev.push_back({*cl[i].begin(),i,1});
    }
    sort(ev.begin(),ev.end());
    int mnx = 1e9 , mxx = -1e9;
    int mny = 1e9 , mxy = -1e9;
    int ans = 1;
    int it = 0;
    while(it<ev.size()){
        int it2 = it;
        while(it2<ev.size()&&ev[it2][0]==ev[it][0]){
            if(ev[it2][2]==0){
                mnx = min(mnx,ev[it2][1]);
                mxx = max(mxx,ev[it2][1]);
            }else{
                mny = min(mny,ev[it2][1]);
                mxy = max(mxy,ev[it2][1]);
            }
            it2++;
        }
        if(it2==ev.size())break;
        if((mxx-mnx+1)*(mxy-mny+1)==ev[it2][0]){
            ans++;
        }
        it = it2;
    }
    return ans;
}
Compilation message (stderr)
seats.cpp: In function 'int swap_seats(int, int)':
seats.cpp:40:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     while(it<ev.size()){
      |           ~~^~~~~~~~~~
seats.cpp:42:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |         while(it2<ev.size()&&ev[it2][0]==ev[it][0]){
      |               ~~~^~~~~~~~~~
seats.cpp:52:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         if(it2==ev.size())break;
      |            ~~~^~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |