#include "seats.h"
#include<bits/stdc++.h>
using namespace std;
namespace {
int read_int() {
int x;
if (scanf("%d", &x) != 1) {
fprintf(stderr, "Error while reading input\n");
exit(1);
}
return x;
}
} // namespace
const int nmax=1e6+42;
int n,m;
pair<int,int> where[nmax];
vector< vector<int> > inp;
pair<int,int> cnt[nmax];
struct info
{
pair<int,int> mini;
pair<int,int> sum;
int cnt_mini;
};
void print(string s,info a)
{
cout<<s<<" -> ";cout<<a.mini.first<<" "<<a.mini.second<<" , "<<a.sum.first<<" "<<a.sum.second<<" , "<<a.cnt_mini<<endl;
}
info tree[4*nmax];
info my_merge(info a,info b)
{
b.mini={b.mini.first+a.sum.first,b.mini.second+a.sum.second};
if(a.mini==b.mini)
{
a.sum={a.sum.first+b.sum.first,a.sum.second+b.sum.second};
a.cnt_mini+=b.cnt_mini;
return a;
}
if(a.mini>b.mini)swap(a,b);
a.sum={a.sum.first+b.sum.first,a.sum.second+b.sum.second};
return a;
}
void update(int node,int l,int r,int pos,pair<int,int> val)
{
if(l==r)
{
tree[node].mini=val;
tree[node].sum=val;
tree[node].cnt_mini=1;
//cout<<"pos= "<<pos<<" node= "<<node;print(" tree",tree[node]);
return;
}
int av=(l+r)/2;
if(pos<=av)update(node*2,l,av,pos,val);
else update(node*2+1,av+1,r,pos,val);
tree[node]=my_merge(tree[node*2],tree[node*2+1]);
/*
cout<<"node= "<<node<<" l= "<<l<<" r= "<<r<<endl;
print("tree[node*2]",tree[node*2]);
print("tree[node*2+1]",tree[node*2+1]);
print("tree[node]",tree[node]);
cout<<"---"<<endl;
*/
}
int ask(int x,int y)
{
if(0>x||x>=n||0>y||y>=m)return 1e9;
return inp[x][y];
}
void eval(int x,int y)
{
if(0>x||x>=n||0>y||y>=m)return;
int cur[5]={0,0,0,0,0};
int help;
help=1+(ask(x-1,y-1)<inp[x][y])+(ask(x-1,y)<inp[x][y])+(ask(x,y-1)<inp[x][y]);
cur[help]++;
help=1+(ask(x-1,y)<inp[x][y])+(ask(x-1,y+1)<inp[x][y])+(ask(x,y+1)<inp[x][y]);
cur[help]++;
help=1+(ask(x,y-1)<inp[x][y])+(ask(x+1,y-1)<inp[x][y])+(ask(x+1,y)<inp[x][y]);
cur[help]++;
help=1+(ask(x,y+1)<inp[x][y])+(ask(x+1,y+1)<inp[x][y])+(ask(x+1,y)<inp[x][y]);
cur[help]++;
cnt[inp[x][y]]={cur[1]-cur[2],cur[3]-cur[4]};
update(1,0,n*m-1,inp[x][y],cnt[inp[x][y]]);
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C)
{
for(int i=0;i<4*nmax;i++)
{
tree[i].mini={10,10};
tree[i].sum={10,10};
}
n=H;
m=W;
for(int t=0;t<n*m;t++)
{
int i=R[t];
int j=C[t];
while(inp.size()<=i)inp.push_back({});
while(inp[i].size()<=j)inp[i].push_back(j);
where[t]={i,j};
inp[i][j]=t;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
eval(i,j);
}
int swap_seats(int a, int b)
{
swap(inp[where[a].first][where[a].second],inp[where[b].first][where[b].second]);
swap(where[a],where[b]);
for(int x=-1;x<=1;x++)
for(int y=-1;y<=1;y++)
{
eval(where[a].first+x,where[a].second+y);
eval(where[b].first+x,where[b].second+y);
}
//print("tree[1]",tree[1]);
return tree[1].cnt_mini;
}
/*
int main() {
int H = read_int();
int W = read_int();
int Q = read_int();
std::vector<int> R(H * W), C(H * W);
for (int i = 0; i < H * W; ++i) {
R[i] = read_int();
C[i] = read_int();
}
std::vector<int> A(Q), B(Q);
for (int j = 0; j < Q; ++j) {
A[j] = read_int();
B[j] = read_int();
}
give_initial_chart(H, W, R, C);
for (int j = 0; j < Q; ++j) {
int answer = swap_seats(A[j], B[j]);
printf("%d\n", answer);
}
return 0;
}
*/
Compilation message
seats.cpp: In function 'void give_initial_chart(int, int, std::vector<int>, std::vector<int>)':
seats.cpp:135:25: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
135 | while(inp.size()<=i)inp.push_back({});
| ~~~~~~~~~~^~~
seats.cpp:136:28: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
136 | while(inp[i].size()<=j)inp[i].push_back(j);
| ~~~~~~~~~~~~~^~~
seats.cpp: At global scope:
seats.cpp:7:5: warning: 'int {anonymous}::read_int()' defined but not used [-Wunused-function]
7 | int read_int() {
| ^~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
78788 KB |
Output is correct |
2 |
Correct |
66 ms |
78624 KB |
Output is correct |
3 |
Correct |
72 ms |
78644 KB |
Output is correct |
4 |
Correct |
67 ms |
78612 KB |
Output is correct |
5 |
Correct |
59 ms |
78652 KB |
Output is correct |
6 |
Correct |
67 ms |
78692 KB |
Output is correct |
7 |
Correct |
70 ms |
78660 KB |
Output is correct |
8 |
Correct |
70 ms |
78628 KB |
Output is correct |
9 |
Correct |
70 ms |
78580 KB |
Output is correct |
10 |
Correct |
69 ms |
78656 KB |
Output is correct |
11 |
Correct |
67 ms |
78600 KB |
Output is correct |
12 |
Correct |
60 ms |
78636 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
78788 KB |
Output is correct |
2 |
Correct |
66 ms |
78624 KB |
Output is correct |
3 |
Correct |
72 ms |
78644 KB |
Output is correct |
4 |
Correct |
67 ms |
78612 KB |
Output is correct |
5 |
Correct |
59 ms |
78652 KB |
Output is correct |
6 |
Correct |
67 ms |
78692 KB |
Output is correct |
7 |
Correct |
70 ms |
78660 KB |
Output is correct |
8 |
Correct |
70 ms |
78628 KB |
Output is correct |
9 |
Correct |
70 ms |
78580 KB |
Output is correct |
10 |
Correct |
69 ms |
78656 KB |
Output is correct |
11 |
Correct |
67 ms |
78600 KB |
Output is correct |
12 |
Correct |
60 ms |
78636 KB |
Output is correct |
13 |
Correct |
103 ms |
79036 KB |
Output is correct |
14 |
Correct |
105 ms |
78988 KB |
Output is correct |
15 |
Correct |
76 ms |
79044 KB |
Output is correct |
16 |
Correct |
73 ms |
79456 KB |
Output is correct |
17 |
Correct |
88 ms |
79044 KB |
Output is correct |
18 |
Correct |
102 ms |
78908 KB |
Output is correct |
19 |
Correct |
98 ms |
79024 KB |
Output is correct |
20 |
Correct |
87 ms |
79148 KB |
Output is correct |
21 |
Correct |
80 ms |
79048 KB |
Output is correct |
22 |
Correct |
74 ms |
79492 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1510 ms |
114244 KB |
Output is correct |
2 |
Correct |
1148 ms |
130312 KB |
Output is correct |
3 |
Correct |
1185 ms |
129832 KB |
Output is correct |
4 |
Correct |
1075 ms |
129912 KB |
Output is correct |
5 |
Correct |
1056 ms |
130212 KB |
Output is correct |
6 |
Correct |
1062 ms |
129860 KB |
Output is correct |
7 |
Correct |
1090 ms |
129908 KB |
Output is correct |
8 |
Correct |
1136 ms |
129944 KB |
Output is correct |
9 |
Correct |
1141 ms |
129972 KB |
Output is correct |
10 |
Correct |
1082 ms |
129968 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
104 ms |
79004 KB |
Output is correct |
2 |
Correct |
184 ms |
82104 KB |
Output is correct |
3 |
Correct |
1020 ms |
113936 KB |
Output is correct |
4 |
Correct |
1482 ms |
130196 KB |
Output is correct |
5 |
Correct |
961 ms |
129908 KB |
Output is correct |
6 |
Correct |
1722 ms |
180744 KB |
Output is correct |
7 |
Correct |
1010 ms |
129972 KB |
Output is correct |
8 |
Correct |
1194 ms |
131828 KB |
Output is correct |
9 |
Correct |
1093 ms |
131456 KB |
Output is correct |
10 |
Correct |
1089 ms |
136160 KB |
Output is correct |
11 |
Correct |
1047 ms |
153340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
91 ms |
79604 KB |
Output is correct |
2 |
Correct |
108 ms |
79560 KB |
Output is correct |
3 |
Correct |
143 ms |
79612 KB |
Output is correct |
4 |
Correct |
171 ms |
79556 KB |
Output is correct |
5 |
Correct |
221 ms |
79816 KB |
Output is correct |
6 |
Correct |
1249 ms |
114280 KB |
Output is correct |
7 |
Correct |
1293 ms |
130984 KB |
Output is correct |
8 |
Correct |
1239 ms |
131088 KB |
Output is correct |
9 |
Correct |
1737 ms |
130920 KB |
Output is correct |
10 |
Correct |
1188 ms |
131052 KB |
Output is correct |
11 |
Correct |
1180 ms |
130896 KB |
Output is correct |
12 |
Correct |
1196 ms |
130920 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
78788 KB |
Output is correct |
2 |
Correct |
66 ms |
78624 KB |
Output is correct |
3 |
Correct |
72 ms |
78644 KB |
Output is correct |
4 |
Correct |
67 ms |
78612 KB |
Output is correct |
5 |
Correct |
59 ms |
78652 KB |
Output is correct |
6 |
Correct |
67 ms |
78692 KB |
Output is correct |
7 |
Correct |
70 ms |
78660 KB |
Output is correct |
8 |
Correct |
70 ms |
78628 KB |
Output is correct |
9 |
Correct |
70 ms |
78580 KB |
Output is correct |
10 |
Correct |
69 ms |
78656 KB |
Output is correct |
11 |
Correct |
67 ms |
78600 KB |
Output is correct |
12 |
Correct |
60 ms |
78636 KB |
Output is correct |
13 |
Correct |
103 ms |
79036 KB |
Output is correct |
14 |
Correct |
105 ms |
78988 KB |
Output is correct |
15 |
Correct |
76 ms |
79044 KB |
Output is correct |
16 |
Correct |
73 ms |
79456 KB |
Output is correct |
17 |
Correct |
88 ms |
79044 KB |
Output is correct |
18 |
Correct |
102 ms |
78908 KB |
Output is correct |
19 |
Correct |
98 ms |
79024 KB |
Output is correct |
20 |
Correct |
87 ms |
79148 KB |
Output is correct |
21 |
Correct |
80 ms |
79048 KB |
Output is correct |
22 |
Correct |
74 ms |
79492 KB |
Output is correct |
23 |
Correct |
1510 ms |
114244 KB |
Output is correct |
24 |
Correct |
1148 ms |
130312 KB |
Output is correct |
25 |
Correct |
1185 ms |
129832 KB |
Output is correct |
26 |
Correct |
1075 ms |
129912 KB |
Output is correct |
27 |
Correct |
1056 ms |
130212 KB |
Output is correct |
28 |
Correct |
1062 ms |
129860 KB |
Output is correct |
29 |
Correct |
1090 ms |
129908 KB |
Output is correct |
30 |
Correct |
1136 ms |
129944 KB |
Output is correct |
31 |
Correct |
1141 ms |
129972 KB |
Output is correct |
32 |
Correct |
1082 ms |
129968 KB |
Output is correct |
33 |
Correct |
104 ms |
79004 KB |
Output is correct |
34 |
Correct |
184 ms |
82104 KB |
Output is correct |
35 |
Correct |
1020 ms |
113936 KB |
Output is correct |
36 |
Correct |
1482 ms |
130196 KB |
Output is correct |
37 |
Correct |
961 ms |
129908 KB |
Output is correct |
38 |
Correct |
1722 ms |
180744 KB |
Output is correct |
39 |
Correct |
1010 ms |
129972 KB |
Output is correct |
40 |
Correct |
1194 ms |
131828 KB |
Output is correct |
41 |
Correct |
1093 ms |
131456 KB |
Output is correct |
42 |
Correct |
1089 ms |
136160 KB |
Output is correct |
43 |
Correct |
1047 ms |
153340 KB |
Output is correct |
44 |
Correct |
91 ms |
79604 KB |
Output is correct |
45 |
Correct |
108 ms |
79560 KB |
Output is correct |
46 |
Correct |
143 ms |
79612 KB |
Output is correct |
47 |
Correct |
171 ms |
79556 KB |
Output is correct |
48 |
Correct |
221 ms |
79816 KB |
Output is correct |
49 |
Correct |
1249 ms |
114280 KB |
Output is correct |
50 |
Correct |
1293 ms |
130984 KB |
Output is correct |
51 |
Correct |
1239 ms |
131088 KB |
Output is correct |
52 |
Correct |
1737 ms |
130920 KB |
Output is correct |
53 |
Correct |
1188 ms |
131052 KB |
Output is correct |
54 |
Correct |
1180 ms |
130896 KB |
Output is correct |
55 |
Correct |
1196 ms |
130920 KB |
Output is correct |
56 |
Correct |
153 ms |
80248 KB |
Output is correct |
57 |
Correct |
274 ms |
80196 KB |
Output is correct |
58 |
Correct |
506 ms |
80636 KB |
Output is correct |
59 |
Correct |
1860 ms |
131028 KB |
Output is correct |
60 |
Correct |
2473 ms |
131184 KB |
Output is correct |
61 |
Correct |
1715 ms |
130940 KB |
Output is correct |
62 |
Correct |
1400 ms |
130996 KB |
Output is correct |
63 |
Correct |
2151 ms |
131116 KB |
Output is correct |
64 |
Correct |
1779 ms |
131032 KB |
Output is correct |
65 |
Correct |
1840 ms |
132732 KB |
Output is correct |
66 |
Correct |
1865 ms |
132360 KB |
Output is correct |
67 |
Correct |
1769 ms |
137240 KB |
Output is correct |
68 |
Correct |
1534 ms |
145064 KB |
Output is correct |
69 |
Correct |
2313 ms |
154364 KB |
Output is correct |