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"seats.h"
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>v;
#define pii pair<int,int>
int h,w;
struct node{
vector<int> mn,mx;
int num=10000;
void update(int pos,int val){
pos+=num;
for(mn[pos]=val,mx[pos]=val;pos>1;pos>>=1){
mn[pos>>1]=min(mn[pos],mn[pos^1]);
mx[pos>>1]=max(mx[pos],mx[pos^1]);
}
}
int getmn(int l, int r){
int res=2e9;
for(l+=num,r+=num;l<=r;l>>=1,r>>=1){
if(l&1)res=min(res,mn[l++]);
if(!(r&1))res=min(res,mn[r--]);
}return res;
}
int getmx(int l, int r){
int res=0;
for(l+=num,r+=num;l<=r;l>>=1,r>>=1){
if(l&1)res=max(res,mx[l++]);
if(!(r&1))res=max(res,mx[r--]);
}return res;
}
pii get(int l,int r){
pii res={getmn(l,r),getmx(l,r)};
return res;
}
void build(){
mn.assign(30001,0);
mn.assign(30001,0);
}
}tree1,tree2;
void give_initial_chart(int H,int W,vector<int>x,vector<int>y){
tree1.build();
tree2.build();
h=H,w=W;
for(int i=0;i<h*w;i++){
v.push_back({x[i],y[i]});
tree1.update(i,x[i]);
tree2.update(i,y[i]);
}
}
int swap_seats(int a,int b){
tree1.update(a,v[b].first);
tree2.update(a,v[b].second);
tree1.update(b,v[a].first);
tree2.update(b,v[a].second);
swap(v[a],v[b]);
int ans=0;
for(int i=0;i<h*w;i++){
auto tmp=tree1.get(0,i);
int l=tmp.first;
int r=tmp.second;
tmp=tree2.get(0,i);
int u=tmp.first;
int d=tmp.second;
if((r-l+1)*(d-u+1)==i+1)ans++;
else i=max(i,(r-l+1)*(d-u+1)-2);
}
return ans;
}
# | 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... |