結果
| 問題 |
No.953 席
|
| コンテスト | |
| ユーザー |
LayCurse
|
| 提出日時 | 2019-12-17 15:43:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,985 bytes |
| コンパイル時間 | 2,673 ms |
| コンパイル使用メモリ | 228,880 KB |
| 最終ジャッジ日時 | 2025-01-08 11:51:50 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 14 WA * 11 |
ソースコード
#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline void rd(int &x){
int k;
int m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
inline void rd(long long &x){
int k;
int m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
inline void wt_L(char a){
putchar_unlocked(a);
}
inline void wt_L(int x){
int s=0;
int m=0;
char f[10];
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
putchar_unlocked('-');
}
while(s--){
putchar_unlocked(f[s]+'0');
}
}
template<class S, class T> inline S chmax(S &a, T b){
if(a<b){
a=b;
}
return a;
}
int N;
int K1;
int K2;
int Q;
long long A[100000];
long long B[100000];
int ind[100000];
int cnv[100000];
int nx[100000][2];
set<int> ok1;
set<int> ok2;
priority_queue< pair<long long,int> > q;
int res[100000];
int main(){
int i;
int j;
int k;
int x;
int y;
int z;
long long tm;
rd(N);
rd(K1);K1 += (-1);
rd(K2);K2 += (-1);
rd(Q);
{
int Lj4PdHRW;
for(Lj4PdHRW=(0);Lj4PdHRW<(Q);Lj4PdHRW++){
rd(A[Lj4PdHRW]);
rd(B[Lj4PdHRW]);
}
}
k = 0;
if(K1 < K2){
while(K1 >= 0 || K2 < N){
if(K1 >= 0){
ind[k++] = K1--;
}
if(K2 < N){
ind[k++] = K2++;
}
}
}
else{
while(K1 < 0 || K2 >= N){
if(K1 < N){
ind[k++] = K1++;
}
if(K2 >= 0){
ind[k++] = K2--;
}
}
}
for(i=(0);i<(N);i++){
cnv[ind[i]] = i;
}
for(i=(0);i<(N);i++){
nx[cnv[i]][0] = nx[cnv[i]][1] = -1;
if(i-1 >= 0){
nx[cnv[i]][0] = cnv[i-1];
}
if(i+1 < N){
nx[cnv[i]][1] = cnv[i+1];
}
}
for(i=(0);i<(N);i++){
ok1.insert(i);
}
for(i=(0);i<(N);i++){
ok2.insert(i);
}
tm = 0;
for(k=(0);k<(Q);k++){
chmax(tm, A[k]);
while(ok1.size()==0 || (q.size() && -q.top().first <= tm)){
chmax(tm, -q.top().first);
i = q.top().second;
q.pop();
ok1.insert(i);
for(z=(0);z<(3);z++){
x = i;
if(z < 2){
x = nx[i][z];
}
if(x==-1){
continue;
}
if(ok1.count(x)==0){
continue;
}
if((nx[x][0]==-1 || ok1.count(nx[x][0])==1) && (nx[x][1]==-1 || ok1.count(nx[x][1])==1)){
ok2.insert(x);
}
}
}
if(ok2.size()){
i = *ok2.begin();
}
else{
i = *ok1.begin();
}
q.push( make_pair(-(tm + B[k]), i) );
res[k] = i;
ok1.erase(i);
for(z=(0);z<(3);z++){
x = i;
if(z < 2){
x = nx[i][z];
}
if(x==-1){
continue;
}
if(ok2.count(x)){
ok2.erase(x);
}
}
}
for(i=(0);i<(Q);i++){
wt_L(ind[res[i]] + 1);
wt_L('\n');
}
return 0;
}
// cLay varsion 20191214-1
// --- original code ---
// int N, K1, K2;
// int Q; ll A[1d5], B[1d5];
//
// int ind[1d5], cnv[1d5], nx[1d5][2];
// set<int> ok1, ok2;
//
// priority_queue< pair<ll,int> > q;
// int res[1d5];
//
// {
// int i, j, k, x, y, z;
// ll tm;
// rd(N,K1--,K2--,Q,(A,B)(Q));
//
// k = 0;
// if(K1 < K2){
// while(K1 >= 0 || K2 < N){
// if(K1 >= 0) ind[k++] = K1--;
// if(K2 < N) ind[k++] = K2++;
// }
// } else {
// while(K1 < 0 || K2 >= N){
// if(K1 < N) ind[k++] = K1++;
// if(K2 >= 0) ind[k++] = K2--;
// }
// }
//
// rep(i,N) cnv[ind[i]] = i;
// rep(i,N){
// nx[cnv[i]][0] = nx[cnv[i]][1] = -1;
// if(i-1 >= 0) nx[cnv[i]][0] = cnv[i-1];
// if(i+1 < N) nx[cnv[i]][1] = cnv[i+1];
// }
//
// rep(i,N) ok1.insert(i);
// rep(i,N) ok2.insert(i);
//
// tm = 0;
// rep(k,Q){
// tm >?= A[k];
// while(ok1.size()==0 || (q.size() && -q.top().first <= tm)){
// tm >?= -q.top().first;
// i = q.top().second;
// q.pop();
// ok1.insert(i);
// rep(z,3){
// x = i;
// if(z < 2) x = nx[i][z];
// if(x==-1) continue;
// if(ok1.count(x)==0) continue;
// if((nx[x][0]==-1 || ok1.count(nx[x][0])==1) && (nx[x][1]==-1 || ok1.count(nx[x][1])==1)) ok2.insert(x);
// }
// }
//
// if(ok2.size()) i = *ok2.begin();
// else i = *ok1.begin();
//
// q.push( make_pair(-(tm + B[k]), i) );
//
// res[k] = i;
// ok1.erase(i);
// rep(z,3){
// x = i;
// if(z < 2) x = nx[i][z];
// if(x==-1) continue;
// if(ok2.count(x)) ok2.erase(x);
// }
// }
//
// rep(i,Q) wt(ind[res[i]] + 1);
// }
LayCurse