# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
264431 |
2020-08-14T06:51:14 Z |
문홍윤(#5092) |
전차 (CEOI13_tram) |
C++17 |
|
28 ms |
4332 KB |
#include <bits/stdc++.h>
#define F first
#define S second
#define eb emplace_back
#define mp make_pair
using namespace std;
typedef pair<int, int> pii;
typedef long long LL;
const LL INF=8e18;
int n, q, re, llin[150010], rlin[150010];
bool ch[150010][3];
pii ans[150010];
pair<LL, pii> get_max(int s, int e){
pair<LL, pii> ret=mp(-INF, mp(-1, -1));
int x[4]={s, (s+e)/2, (s+e)/2+1, e};
for(int i=0; i<4; i++){
if(x[i]>e)continue;
for(int j=0; j<2; j++){
LL d=INF;
for(int i2=0; i2<4; i2+=3){
for(int j2=0; j2<2; j2++){
if(!ch[x[i2]][j2])continue;
d=min(d, (LL)(x[i]-x[i2])*(x[i]-x[i2])+(LL)(j-j2)*(j-j2));
}
}
ret=max(ret, mp(d, mp(-x[i], -j)));
}
}
if(ret.F==-1)return mp(INF, mp(-s, 0));
return ret;
}
set<pair<pair<LL, pii>, pii> > s;
int main(){
scanf("%d %d", &n, &q);
pair<pair<LL, pii>, pii> non;
non.S.F=1, non.S.S=n;
rlin[1]=n;
llin[n]=1;
non.F=get_max(1, n);
s.insert(non);
for(int i=1; i<=q; i++){
char c;
scanf(" %c", &c);
if(c=='E'){
pair<pair<LL, pii>, pii> nw=*s.rbegin();
s.erase(nw);
ans[++re]=mp(-nw.F.S.F, -nw.F.S.S);
rlin[nw.S.F]=ans[re].F;
llin[nw.S.S]=ans[re].F;
llin[ans[re].F]=nw.S.F;
rlin[ans[re].F]=nw.S.S;
pair<pair<LL, pii>, pii> l, r;
l.S.F=nw.S.F, l.S.S=ans[re].F;
r.S.F=ans[re].F, r.S.S=nw.S.S;
ch[ans[re].F][ans[re].S]=true;
l.F=get_max(l.S.F, l.S.S);
r.F=get_max(r.S.F, r.S.S);
s.insert(l);
s.insert(r);
}
else{
int num;
scanf("%d", &num);
pair<pair<LL, pii>, pii> l, r;
l.S.F=llin[ans[num].F], l.S.S=ans[num].F;
r.S.F=ans[num].F, r.S.S=rlin[ans[num].F];
l.F=get_max(l.S.F, l.S.S);
r.F=get_max(r.S.F, r.S.S);
s.erase(l);
s.erase(r);
llin[ans[num].F]=0;
rlin[ans[num].F]=0;
rlin[l.S.F]=r.S.S;
llin[r.S.S]=l.S.F;
ch[ans[num].F][ans[num].S]=false;
pair<pair<LL, pii>, pii> nw;
nw.S.F=l.S.F, nw.S.S=r.S.S;
nw.F=get_max(nw.S.F, nw.S.S);
s.insert(nw);
}
}
for(int i=1; i<=re; i++)printf("%d %d\n", ans[i].F, ans[i].S+1);
}
/*
3 7
E
E
E
L 2
E
L 1
E
*/
Compilation message
tram.cpp: In function 'int main()':
tram.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
38 | scanf("%d %d", &n, &q);
| ~~~~~^~~~~~~~~~~~~~~~~
tram.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
47 | scanf(" %c", &c);
| ~~~~~^~~~~~~~~~~
tram.cpp:67:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
67 | scanf("%d", &num);
| ~~~~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
364 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
364 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
492 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
492 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
2028 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
2028 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
27 ms |
2244 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
28 ms |
4332 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |