#include<bits/stdc++.h>
#define int long long
#define ld double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
#include "seats.h"
using namespace std;
int tst, ts;
intt mo = 1e9+7, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
ret ( ( x % mo ) * ( y % mo ) ) % mo;
ret x*y;
}
int pwo( int x, int y ) {
int res = 1;
for( int i = 63; i + 1; i-- )
res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
ret res;
}
int dvii( int x, int y ) {
ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
ret ( int )x - '0';
}
int lgg( int x, int y ) {
int u = 0;
while( x ) {
u++;
x /= y;
}
ret u;
}
int mun( int x, int y ) {
while( x < y )x += mo;
ret ( x - y ) % mo;
}
int add( int x, int y ) {
ret x + y - ( mo * ( x + y >= mo ) );
ret x + y;
}
int lcm( int x, int y ) {
ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int M =1007, N = 1e6+ 7, N2 = 5e3 + 7, inf = 1e9 + 7;
intt tr[N*4][2][2],sz,n,m,a[N][2],ans;
void bul(intt no,intt l,intt r){
if(l==r){
tr[no][1][0]=tr[no][0][0]=a[l][0];
tr[no][1][1]=tr[no][0][1]=a[l][1];
ret;
}
bul(no*2,l,mid);
bul(no*2+1,mid+1,r);
tr[no][1][0]=min(tr[no*2][1][0],tr[no*2+1][1][0]);
tr[no][0][0]=max(tr[no*2][0][0],tr[no*2+1][0][0]);
tr[no][1][1]=min(tr[no*2][1][1],tr[no*2+1][1][1]);
tr[no][0][1]=max(tr[no*2][0][1],tr[no*2+1][0][1]);
}
pair<ipr,ipr> qr(intt no,intt l,intt r,intt s,intt e){
if(s>r||l>e)
ret {{-inf,inf},{-inf,inf}};
if(s<=l&&r<=e)
ret {{tr[no][0][0],tr[no][1][0]},{tr[no][0][1],tr[no][1][1]}};
pair<ipr,ipr> x=qr(no*2,l,mid,s,e),y=qr(no*2+1,mid+1,r,s,e);
ret {{max(x._1._1,y._1._1),min(x._1._2,y._1._2)},
{max(y._2._1,x._2._1),min(x._2._2,y._2._2)}};
}
void up(intt no,intt l,intt r,intt in){
if(l==r){
tr[no][1][0]=tr[no][0][0]=a[in][0];
tr[no][1][1]=tr[no][0][1]=a[in][1];
ret ;
}
if(in<=mid)
up(no*2,l,mid,in);
else
up(no*2+1,mid+1,r,in);
tr[no][1][1]=min(tr[no*2][1][1],tr[no*2+1][1][1]);
tr[no][0][1]=max(tr[no*2][0][1],tr[no*2+1][0][1]);
tr[no][1][0]=min(tr[no*2][1][0],tr[no*2+1][1][0]);
tr[no][0][0]=max(tr[no*2][0][0],tr[no*2+1][0][0]);
}
void give_initial_chart(intt nn,intt mm,vector<intt>c,vector<intt>b){
n=nn,m=mm;sz=n*m;
for(intt i=0;i<n*m;i++)
a[i][0]=c[i],a[i][1]=b[i];
bul(1,0,sz-1);
for(intt i=0;i<sz;i++){
pair<ipr,ipr>p=qr(1,0,sz-1,0,i);
// cout<<i<<endl;
//cout<<ma1<<" "<<mi1<<" "<<ma2<<" "<<mi2<<endl;
ans+=((p._1._1-p._1._2+1)*(p._2._1-p._2._2+1)==i+1);
}
}
intt swap_seats(intt x,intt y){
if(y<x)
swap(x,y);
for(intt i=x;i<y;i++){
pair<ipr,ipr>p=qr(1,0,sz-1,0,i);
// cout<<i<<endl;
//cout<<ma1<<" "<<mi1<<" "<<ma2<<" "<<mi2<<endl;
ans-=((p._1._1-p._1._2+1)*(p._2._1-p._2._2+1)==i+1);
}
swap(a[x][0],a[y][0]);
swap(a[x][1],a[y][1]);
up(1,0,sz-1,y);
up(1,0,sz-1,x);
for(intt i=x;i<y;i++){
pair<ipr,ipr>p=qr(1,0,sz-1,0,i);
// cout<<i<<endl;
//cout<<ma1<<" "<<mi1<<" "<<ma2<<" "<<mi2<<endl;
ans+=((p._1._1-p._1._2+1)*(p._2._1-p._2._2+1)==i+1);
}
ret ans;
}
/*
void solve(){
}
intt main() {
FFF
// freopen("fcolor.in", "r", stdin);
// freopen("fcolor.out", "w", stdout);
tst = 1;
//cin >> tst;
for ( ts = 1; ts <= tst; ts++ ){
solve();
}
}
*/
# | 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... |