이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "seats.h"
#include <iostream>
using namespace std;
vector<int> r;
long long int lx,rx,ly,ry,c,d,x[1000005],y[1000005],n,maxxtree[2000005],minxtree[2000005],maxytree[2000005],minytree[2000005];
int build(int s,int e,int t)
{
if(s==e)
{
maxxtree[t]=x[e];
minxtree[t]=x[e];
maxytree[t]=y[e];
minytree[t]=y[e];
return 0;
}
else
{
build(s,(s+e)/2,t*2);
build((s+e)/2+1,e,t*2+1);
maxxtree[t]=max(maxxtree[t*2],maxxtree[t*2+1]);
minxtree[t]=min(minxtree[t*2],minxtree[t*2+1]);
maxytree[t]=max(maxytree[t*2],maxytree[t*2+1]);
minytree[t]=min(minytree[t*2],minytree[t*2+1]);
//cout<<s<<" "<<e<<" "<<t<<" "<<minxtree[t]<<" "<<maxxtree[t]<<" "<<minytree[t]<<" "<<maxytree[t]<<endl;
return 0;
}
}
int change(int s,int e,int t)
{
if(c<s || c>e)return 0;
if(s==e)
{
maxxtree[t]=x[e];
minxtree[t]=x[e];
maxytree[t]=y[e];
minytree[t]=y[e];
return 0;
}
change(s,(s+e)/2,t*2);
change((s+e)/2+1,e,t*2+1);
maxxtree[t]=max(maxxtree[t*2],maxxtree[t*2+1]);
minxtree[t]=min(minxtree[t*2],minxtree[t*2+1]);
maxytree[t]=max(maxytree[t*2],maxytree[t*2+1]);
minytree[t]=min(minytree[t*2],minytree[t*2+1]);
}
int find(int s,int e,int t)
{
//cout<<s<<" "<<e<<" "<<t<<" "<<endl;
if(c>e || d<s)return 0;
else if(c<=s && e<=d)
{
//cout<<s<<" "<<e<<" "<<t<<endl;
lx=min(minxtree[t],lx);
rx=max(maxxtree[t],rx);
ly=min(minytree[t],ly);
ry=max(maxytree[t],ry);
//cout<<minxtree[t]<<" "<<maxxtree[t]<<" "<<minytree[t]<<" "<<maxytree[t]<<endl;
}
else
{
find(s,(s+e)/2,t*2);
find((s+e)/2+1,e,t*2+1);
}
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
n=H*W;
for(int i=0;i<n;i++)
{
x[i]=R[i];
y[i]=C[i];
}
build(0,n-1,1);
}
int swap_seats(int a, int b) {
swap(x[a],x[b]);
swap(y[a],y[b]);
//for(int i=0;i<n;i++)cout<<x[i]<<" "<<y[i]<<" ";
//cout<<endl;
if(a>b)swap(a,b);
c=a;
change(0,n-1,1);
c=b;
change(0,n-1,1);
int ans=1;
lx=x[0],rx=x[0],ly=y[0],ry=y[0];
for(int i=1;i<n;i++)
{
lx=min(x[i],lx);
rx=max(x[i],rx);
ly=min(y[i],ly);
ry=max(y[i],ry);
//cout<<i<<" "<<x[i]<<" "<<y[i]<<" "<<lx<<" "<<rx<<" "<<ly<<" "<<ry<<endl;
//system("pause");
if((rx-lx+1)*(ry-ly+1)==i+1)ans++;
else
{
c=i,d=(rx-lx+1)*(ry-ly+1)-1;
//cout<<c<<" "<<d<<" "<<i<<endl;
i=(rx-lx+1)*(ry-ly+1)-2;
find(0,n-1,1);
//cout<<i<<endl;
}
}
return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
seats.cpp: In function 'int change(int, int, int)':
seats.cpp:47:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
seats.cpp: In function 'int find(int, int, int)':
seats.cpp:67:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# | 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... |