Submission #1205954

#TimeUsernameProblemLanguageResultExecution timeMemory
1205954Adeeb_obedoSeats (IOI18_seats)C++20
0 / 100
4094 ms56836 KiB
#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 = 2e18 + 7;
intt tr[N*4][2][2],sz,n,m,a[N][2],ans;
void bul(int no,int l,int r,int j){
    if(l==r){
        tr[no][0][j]=tr[no][1][j]=a[l][j];
        ret;
    }
    bul(no*2,l,mid,j);
    bul(no*2+1,mid+1,r,j);
    tr[no][1][j]=min(tr[no*2][1][j],tr[no*2+1][1][j]);
    tr[no][0][j]=max(tr[no*2][0][j],tr[no*2+1][0][j]);
}
int qr(int no,int l,int r,int s,int e,int i,int j){
    if(s>r||l>e)
        ret (i?inf:-inf);
    if(s<=l&&r<=e)
        ret tr[no][i][j];
    int x=qr(no*2,l,mid,s,e,i,j),y=qr(no*2+1,mid+1,r,s,e,i,j);
    if(i)
        ret min(x,y);
    ret max(x,y);
}
void up(int no,int l,int r,int in,int i,int j){
    if(l==r){
        tr[no][i][j]=a[in][j];
        ret ;
    }
    if(in<=mid)
        up(no*2,l,mid,in,i,j);
    else
        up(no*2+1,mid+1,r,in,i,j);
    if(i)
        tr[no][i][j]=min(tr[no*2][i][j],tr[no*2+1][i][j]);
    else
        tr[no][i][j]=max(tr[no*2][i][j],tr[no*2+1][i][j]);
}
void give_initial_chart(intt nn,intt mm,vector<intt>c,vector<intt>b){
    n=nn,m=mm;sz=n*m;
    for(int i=0;i<n*m;i++)
        a[i][0]=c[i],a[i][1]=b[i];
    bul(1,0,sz-1,0);
    bul(1,0,sz-1,1);
    for(int i=0;i<sz;i++){
        int ma1=qr(1,0,sz-1,0,i,0,0);
        int mi1=qr(1,0,sz-1,0,i,1,0);
        int ma2=qr(1,0,sz-1,0,i,0,1);
        int mi2=qr(1,0,sz-1,0,i,1,1);
       // cout<<i<<endl;
        //cout<<ma1<<" "<<mi1<<" "<<ma2<<" "<<mi2<<endl;
        ans+=((ma1-mi1+1)*(ma2-mi2+1)==i+1);
    }
}
int swap_seats(intt x,intt y){
    for(int i=x;i<=y;i++){
        int ma1=qr(1,0,sz-1,0,i,0,0);
        int mi1=qr(1,0,sz-1,0,i,1,0);
        int ma2=qr(1,0,sz-1,0,i,0,1);
        int mi2=qr(1,0,sz-1,0,i,1,1);
        ans-=((ma1-mi1)*(ma2-mi2)==i+1);
    }
    for(int i=x;i<=y;i++){
        int ma1=qr(1,0,sz-1,0,i,0,0);
        int mi1=qr(1,0,sz-1,0,i,1,0);
        int ma2=qr(1,0,sz-1,0,i,0,1);
        int mi2=qr(1,0,sz-1,0,i,1,1);
        ans+=((ma1-mi1)*(ma2-mi2)==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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...