Submission #12142

#TimeUsernameProblemLanguageResultExecution timeMemory
12142gs14004전선 연결하기 (GA9_wire)C++98
0 / 100
0 ms7688 KiB
#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{ printf("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{ printf("IMPOSSIBLE"); return 0; } } } } puts(str); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...