#include <bits/stdc++.h>
#define ll long long
#define db long double
#define maxn 1000005
#define II pair <ll,ll>
#define III pair <ll,II>
#define IV pair <vector <int>,vector <int> >
#define IDB pair <db,int>
#define TII pair <treap*,treap*>
#define fst first
#define snd second
#define BIT(x,i) ((x>>i)&1)
#define pi acos(-1)
#define to_radian(x) (x*pi/180.0)
#define to_degree(x) (x*180.0/pi)
#define Log(x) (31-__builtin_clz((int)x))
#define LogLL(x) (63-__builtin_clzll((ll)x)
using namespace std;
#include "seats.h"
struct pt
{
int mi3,mi1,slmi;
friend pt operator + (pt a,pt b)
{
if(a.mi3<b.mi3) return a;
if(b.mi3<a.mi3) return b;
if(a.mi1<b.mi1) return a;
if(b.mi1<a.mi1) return b;
return { a.mi3,a.mi1,a.slmi+b.slmi };
}
};
struct Interval_Tree
{
pt st[4*maxn];
int lz3[4*maxn],lz1[4*maxn];
void change(int id,int k3,int k1)
{
st[id].mi3+=k3;
st[id].mi1+=k1;
lz3[id]+=k3;
lz1[id]+=k1;
}
void down(int id)
{
change(id*2,lz3[id],lz1[id]);
change(id*2+1,lz3[id],lz1[id]);
lz3[id]=lz1[id]=0;
}
void build(int id,int l,int r)
{
if(l==r) { st[id]={ 0,0,1 }; return ; }
int mid=(l+r)>>1;
build(id*2,l,mid); build(id*2+1,mid+1,r);
st[id]=st[id*2]+st[id*2+1];
}
void update(int id,int l,int r,int u,int v,int k3,int k1)
{
if(u>r || v<l) return ;
if(u<=l && r<=v) { change(id,k3,k1); return ; }
down(id);
int mid=(l+r)>>1;
update(id*2,l,mid,u,v,k3,k1); update(id*2+1,mid+1,r,u,v,k3,k1);
st[id]=st[id*2]+st[id*2+1];
}
} IT;
vector <int> a[maxn];
int n,m,x[maxn],y[maxn],i,j;
void Work(int x,int y,int k)
{
if(a[x][y]==-1 || a[x][y+1]==-1 || a[x+1][y]==-1 || a[x+1][y+1]==-1) return ;
vector <int> vec;
vec.push_back(a[x][y]);
vec.push_back(a[x][y+1]);
vec.push_back(a[x+1][y]);
vec.push_back(a[x+1][y+1]);
sort(vec.begin(),vec.end());
IT.update(1,1,n*m,vec[0],vec[1]-1,0,k);
IT.update(1,1,n*m,vec[2],vec[3]-1,k,0);
}
void give_initial_chart(int _n,int _m,vector <int> _X,vector <int> _Y)
{
n=_n; m=_m;
for(i=0;i<n*m;i++) x[i+1]=_X[i]+1,y[i+1]=_Y[i]+1;
for(i=0;i<=n+1;i++) a[i].resize(m+2);
for(i=1;i<=n*m;i++) a[x[i]][y[i]]=i;
for(i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=n*m+1;
for(i=1;i<=n;i++) a[i][0]=a[i][m+1]=n*m+1;
IT.build(1,1,n*m);
for(i=0;i<=n;i++)
for(j=0;j<=m;j++) Work(i,j,1);
}
int swap_seats(int u,int v)
{
u++; v++;
Work(x[u]-1,y[u]-1,-1);
Work(x[u]-1,y[u],-1);
Work(x[u],y[u]-1,-1);
Work(x[u],y[u],-1);
a[x[u]][y[u]]=-1;
Work(x[v]-1,y[v]-1,-1);
Work(x[v]-1,y[v],-1);
Work(x[v],y[v]-1,-1);
Work(x[v],y[v],-1);
a[x[v]][y[v]]=-1;
swap(x[u],x[v]);
swap(y[u],y[v]);
a[x[u]][y[u]]=u;
Work(x[u]-1,y[u]-1,1);
Work(x[u]-1,y[u],1);
Work(x[u],y[u]-1,1);
Work(x[u],y[u],1);
a[x[v]][y[v]]=v;
Work(x[v]-1,y[v]-1,1);
Work(x[v]-1,y[v],1);
Work(x[v],y[v]-1,1);
Work(x[v],y[v],1);
return IT.st[1].slmi;
}
/*
int main()
{
freopen("seats.inp","r",stdin);
freopen("seats.out","w",stdout);
int n,m,q,i,x,y,k;
vector <int> X,Y;
cin>>n>>m>>q;
for(i=1;i<=n*m;i++) cin>>x>>y,X.push_back(x),Y.push_back(y);
give_initial_chart(n,m,X,Y);
for(i=1;i<=q;i++) cin>>x>>y,cout<<swap_seats(x,y)<<'\n';
}
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
29312 KB |
Output is correct |
2 |
Correct |
25 ms |
29272 KB |
Output is correct |
3 |
Correct |
34 ms |
29276 KB |
Output is correct |
4 |
Correct |
24 ms |
29316 KB |
Output is correct |
5 |
Correct |
22 ms |
29312 KB |
Output is correct |
6 |
Correct |
31 ms |
29276 KB |
Output is correct |
7 |
Correct |
32 ms |
29276 KB |
Output is correct |
8 |
Correct |
38 ms |
29292 KB |
Output is correct |
9 |
Correct |
30 ms |
29272 KB |
Output is correct |
10 |
Correct |
32 ms |
29272 KB |
Output is correct |
11 |
Correct |
34 ms |
29300 KB |
Output is correct |
12 |
Correct |
23 ms |
29272 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
29312 KB |
Output is correct |
2 |
Correct |
25 ms |
29272 KB |
Output is correct |
3 |
Correct |
34 ms |
29276 KB |
Output is correct |
4 |
Correct |
24 ms |
29316 KB |
Output is correct |
5 |
Correct |
22 ms |
29312 KB |
Output is correct |
6 |
Correct |
31 ms |
29276 KB |
Output is correct |
7 |
Correct |
32 ms |
29276 KB |
Output is correct |
8 |
Correct |
38 ms |
29292 KB |
Output is correct |
9 |
Correct |
30 ms |
29272 KB |
Output is correct |
10 |
Correct |
32 ms |
29272 KB |
Output is correct |
11 |
Correct |
34 ms |
29300 KB |
Output is correct |
12 |
Correct |
23 ms |
29272 KB |
Output is correct |
13 |
Correct |
65 ms |
29872 KB |
Output is correct |
14 |
Correct |
75 ms |
29784 KB |
Output is correct |
15 |
Correct |
48 ms |
30216 KB |
Output is correct |
16 |
Correct |
41 ms |
30040 KB |
Output is correct |
17 |
Correct |
63 ms |
29788 KB |
Output is correct |
18 |
Correct |
56 ms |
29692 KB |
Output is correct |
19 |
Correct |
53 ms |
29984 KB |
Output is correct |
20 |
Correct |
47 ms |
30008 KB |
Output is correct |
21 |
Correct |
38 ms |
29952 KB |
Output is correct |
22 |
Correct |
43 ms |
30300 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1638 ms |
112740 KB |
Output is correct |
2 |
Correct |
902 ms |
112856 KB |
Output is correct |
3 |
Correct |
888 ms |
112616 KB |
Output is correct |
4 |
Correct |
784 ms |
112492 KB |
Output is correct |
5 |
Correct |
820 ms |
112504 KB |
Output is correct |
6 |
Correct |
801 ms |
112464 KB |
Output is correct |
7 |
Correct |
829 ms |
112616 KB |
Output is correct |
8 |
Correct |
874 ms |
112616 KB |
Output is correct |
9 |
Correct |
922 ms |
112616 KB |
Output is correct |
10 |
Correct |
846 ms |
112620 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
66 ms |
29784 KB |
Output is correct |
2 |
Correct |
145 ms |
40104 KB |
Output is correct |
3 |
Correct |
815 ms |
112612 KB |
Output is correct |
4 |
Correct |
1808 ms |
112620 KB |
Output is correct |
5 |
Correct |
806 ms |
120404 KB |
Output is correct |
6 |
Correct |
1675 ms |
140112 KB |
Output is correct |
7 |
Correct |
827 ms |
115320 KB |
Output is correct |
8 |
Correct |
1056 ms |
112724 KB |
Output is correct |
9 |
Correct |
874 ms |
112804 KB |
Output is correct |
10 |
Correct |
948 ms |
114704 KB |
Output is correct |
11 |
Correct |
883 ms |
124188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
111 ms |
30836 KB |
Output is correct |
2 |
Correct |
124 ms |
30892 KB |
Output is correct |
3 |
Correct |
171 ms |
30672 KB |
Output is correct |
4 |
Correct |
220 ms |
30928 KB |
Output is correct |
5 |
Correct |
330 ms |
31436 KB |
Output is correct |
6 |
Correct |
1333 ms |
121360 KB |
Output is correct |
7 |
Correct |
1548 ms |
121388 KB |
Output is correct |
8 |
Correct |
1278 ms |
121316 KB |
Output is correct |
9 |
Correct |
2479 ms |
121580 KB |
Output is correct |
10 |
Correct |
1209 ms |
121168 KB |
Output is correct |
11 |
Correct |
1204 ms |
121424 KB |
Output is correct |
12 |
Correct |
1158 ms |
121264 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
29312 KB |
Output is correct |
2 |
Correct |
25 ms |
29272 KB |
Output is correct |
3 |
Correct |
34 ms |
29276 KB |
Output is correct |
4 |
Correct |
24 ms |
29316 KB |
Output is correct |
5 |
Correct |
22 ms |
29312 KB |
Output is correct |
6 |
Correct |
31 ms |
29276 KB |
Output is correct |
7 |
Correct |
32 ms |
29276 KB |
Output is correct |
8 |
Correct |
38 ms |
29292 KB |
Output is correct |
9 |
Correct |
30 ms |
29272 KB |
Output is correct |
10 |
Correct |
32 ms |
29272 KB |
Output is correct |
11 |
Correct |
34 ms |
29300 KB |
Output is correct |
12 |
Correct |
23 ms |
29272 KB |
Output is correct |
13 |
Correct |
65 ms |
29872 KB |
Output is correct |
14 |
Correct |
75 ms |
29784 KB |
Output is correct |
15 |
Correct |
48 ms |
30216 KB |
Output is correct |
16 |
Correct |
41 ms |
30040 KB |
Output is correct |
17 |
Correct |
63 ms |
29788 KB |
Output is correct |
18 |
Correct |
56 ms |
29692 KB |
Output is correct |
19 |
Correct |
53 ms |
29984 KB |
Output is correct |
20 |
Correct |
47 ms |
30008 KB |
Output is correct |
21 |
Correct |
38 ms |
29952 KB |
Output is correct |
22 |
Correct |
43 ms |
30300 KB |
Output is correct |
23 |
Correct |
1638 ms |
112740 KB |
Output is correct |
24 |
Correct |
902 ms |
112856 KB |
Output is correct |
25 |
Correct |
888 ms |
112616 KB |
Output is correct |
26 |
Correct |
784 ms |
112492 KB |
Output is correct |
27 |
Correct |
820 ms |
112504 KB |
Output is correct |
28 |
Correct |
801 ms |
112464 KB |
Output is correct |
29 |
Correct |
829 ms |
112616 KB |
Output is correct |
30 |
Correct |
874 ms |
112616 KB |
Output is correct |
31 |
Correct |
922 ms |
112616 KB |
Output is correct |
32 |
Correct |
846 ms |
112620 KB |
Output is correct |
33 |
Correct |
66 ms |
29784 KB |
Output is correct |
34 |
Correct |
145 ms |
40104 KB |
Output is correct |
35 |
Correct |
815 ms |
112612 KB |
Output is correct |
36 |
Correct |
1808 ms |
112620 KB |
Output is correct |
37 |
Correct |
806 ms |
120404 KB |
Output is correct |
38 |
Correct |
1675 ms |
140112 KB |
Output is correct |
39 |
Correct |
827 ms |
115320 KB |
Output is correct |
40 |
Correct |
1056 ms |
112724 KB |
Output is correct |
41 |
Correct |
874 ms |
112804 KB |
Output is correct |
42 |
Correct |
948 ms |
114704 KB |
Output is correct |
43 |
Correct |
883 ms |
124188 KB |
Output is correct |
44 |
Correct |
111 ms |
30836 KB |
Output is correct |
45 |
Correct |
124 ms |
30892 KB |
Output is correct |
46 |
Correct |
171 ms |
30672 KB |
Output is correct |
47 |
Correct |
220 ms |
30928 KB |
Output is correct |
48 |
Correct |
330 ms |
31436 KB |
Output is correct |
49 |
Correct |
1333 ms |
121360 KB |
Output is correct |
50 |
Correct |
1548 ms |
121388 KB |
Output is correct |
51 |
Correct |
1278 ms |
121316 KB |
Output is correct |
52 |
Correct |
2479 ms |
121580 KB |
Output is correct |
53 |
Correct |
1209 ms |
121168 KB |
Output is correct |
54 |
Correct |
1204 ms |
121424 KB |
Output is correct |
55 |
Correct |
1158 ms |
121264 KB |
Output is correct |
56 |
Correct |
138 ms |
30668 KB |
Output is correct |
57 |
Correct |
285 ms |
30656 KB |
Output is correct |
58 |
Correct |
471 ms |
31544 KB |
Output is correct |
59 |
Correct |
1636 ms |
113528 KB |
Output is correct |
60 |
Correct |
2835 ms |
113396 KB |
Output is correct |
61 |
Correct |
1473 ms |
113748 KB |
Output is correct |
62 |
Correct |
1303 ms |
117228 KB |
Output is correct |
63 |
Correct |
3031 ms |
116172 KB |
Output is correct |
64 |
Correct |
1903 ms |
114388 KB |
Output is correct |
65 |
Correct |
1766 ms |
113632 KB |
Output is correct |
66 |
Correct |
1772 ms |
113680 KB |
Output is correct |
67 |
Correct |
1702 ms |
115908 KB |
Output is correct |
68 |
Correct |
1353 ms |
120036 KB |
Output is correct |
69 |
Correct |
2540 ms |
125296 KB |
Output is correct |