이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <stack>
using namespace std;
int n,a[600005];
int lp[300005], rp[300005];
char str[600005];
int occu[300005];
stack<int> up, dn;
int main(){
scanf("%d",&n);
for (int i=1; i<=2*n; i++) {
scanf("%d",&a[i]);
if(lp[a[i]] == 0) lp[a[i]] = i;
else rp[a[i]] = i;
}
for (int i=1; i<=2*n; i++) {
if(occu[a[i]]){
if(occu[a[i]] == 2) up.pop(), str[i-1] = '^';
else dn.pop(), str[i-1] = 'v';
}
else{
int up_cost = up.empty() ? 1e9 : rp[up.top()];
int dn_cost = dn.empty() ? 1e9 : rp[dn.top()];
int my_cost = rp[a[i]];
if(up_cost <= dn_cost){
if(my_cost < up_cost){
up.push(a[i]);
occu[a[i]] = 2;
str[i-1] = '^';
}
else if(my_cost < dn_cost){
dn.push(a[i]);
occu[a[i]] = 1;
str[i-1] = 'v';
}
else{
puts("IMPOSSIBLE");
return 0;
}
}
else{
if(my_cost < dn_cost){
dn.push(a[i]);
occu[a[i]] = 1;
str[i-1] = 'v';
}
else if(my_cost < up_cost){
up.push(a[i]);
occu[a[i]] = 2;
str[i-1] = '^';
}
else{
puts("IMPOSSIBLE");
return 0;
}
}
}
}
puts(str);
}
# | 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... |