結果
| 問題 |
No.1051 PQ Permutation
|
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2020-05-10 01:18:20 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 129 ms / 2,000 ms |
| コード長 | 1,656 bytes |
| コンパイル時間 | 825 ms |
| コンパイル使用メモリ | 99,648 KB |
| 実行使用メモリ | 13,824 KB |
| 最終ジャッジ日時 | 2024-07-06 11:29:55 |
| 合計ジャッジ時間 | 4,998 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 46 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:71:27: warning: 'qx' may be used uninitialized [-Wmaybe-uninitialized]
71 | if (sit != aset.end() && (px <= qx || q == as[k])) {
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:54:11: note: 'qx' was declared here
54 | int px, qx;
| ^~
main.cpp:70:40: warning: 'px' may be used uninitialized [-Wmaybe-uninitialized]
70 | if (sit != aset.end() && *sit == q && px > k) sit++;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
main.cpp:54:7: note: 'px' was declared here
54 | int px, qx;
| ^~
ソースコード
/* -*- coding: utf-8 -*-
*
* 1051.cc: No.1051 PQ Permutation - yukicoder
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>
using namespace std;
/* constant */
const int MAX_N = 200000;
/* typedef */
typedef set<int> si;
/* global variables */
int as[MAX_N], bs[MAX_N];
si aset;
/* subroutines */
inline void setpos(int a, int x, int p, int q, int &px, int &qx) {
if (a == p) px = x;
else if (a == q) qx = x;
}
/* main */
int main() {
int n, p, q;
scanf("%d%d%d", &n, &p, &q);
p--, q--;
int px, qx;
for (int i = 0; i < n; i++) {
scanf("%d", as + i);
as[i]--;
setpos(as[i], i, p, q, px, qx);
}
//printf("px=%d, qx=%d\n", px, qx);
int k = n - 1;
for (; k < n;) {
if (k < 0) {
puts("-1");
return 0;
}
si::iterator sit = aset.upper_bound(as[k]);
if (sit != aset.end() && *sit == q && px > k) sit++;
if (sit != aset.end() && (px <= qx || q == as[k])) {
int t = *sit;
aset.erase(sit);
setpos(t, k, p, q, px, qx);
if (as[k] >= 0) {
aset.insert(as[k]);
setpos(as[k], n, p, q, px, qx);
}
as[k++] = t;
}
else {
aset.insert(as[k]);
setpos(as[k], n, p, q, px, qx);
as[k--] = -1;
}
}
//printf("k=%d, px=%d, qx=%d\n", k, px, qx);
for (int i = 0; i < n; i++) {
if (i) putchar(' ');
printf("%d", as[i] + 1);
}
putchar('\n');
return 0;
}
tnakao0123