# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
26210 | imsifile | 유괴 2 (JOI17_abduction2) | C++98 | 4003 ms | 15932 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
int H, W, Q;
int ho[50505], ver[50505];
map<pair<int,int>, int> vd, hd;
int verti(int, int);
int hori(int, int);
int verti(int h, int v){
int gap = vd[make_pair(h,v)];
if(gap) return gap;
int val = ver[v];
int i, up=0, down=0;
for(i=h+1; i<H; i++){
up=i-h;
if(ho[i]>val)break;
}
if(i<H) up += hori(v, i);
for(i=h-1; i>=0; i--){
down=h-i;
if(ho[i]>val)break;
}
if(i>=0) down += hori(v, i);
return vd[make_pair(h,v)] = max(up, down);
}
int hori(int v, int h){
int gap = hd[make_pair(h,v)];
if(gap) return gap;
int val = ho[h];
int i, up=0, down=0;
for(i=v+1; i<W; i++){
up=i-v;
if(ver[i]>val)break;
}
if(i<W) up += verti(h, i);
for(i=v-1; i>=0; i--){
down=v-i;
if(ver[i]>val)break;
}
if(i>=0) down += verti(h, i);
return hd[make_pair(h,v)]=max(up, down);
}
int main(){
scanf("%d%d%d", &H, &W, &Q);
for(int i=0; i<H; i++) scanf("%d", &ho[i]);
for(int i=0; i<W; i++) scanf("%d", &ver[i]);
while(Q--){
int h, v;
scanf("%d%d", &h, &v), h--, v--;
printf("%d\n", max(verti(h, v), hori(v, h)));
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |