Submission #1205981

#TimeUsernameProblemLanguageResultExecution timeMemory
1205981Adeeb_obedoSeats (IOI18_seats)C++20
11 / 100
4096 ms56640 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 = 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 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...