提出 #45791936


ソースコード 拡げる

// LUOGU_RID: 125558222
#include <bits/stdc++.h>
#define ls num << 1
#define rs ls | 1
#define li ls, l, mid
#define ri rs, mid + 1, r
#define debug cerr << "[" << __LINE__ << "] "
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> inline void chkmax(T& x, T y) { x = max(x, y); }
template <typename T> inline void chkmin(T& x, T y) { x = min(x, y); }
template <typename T> inline void read(T &x) {
	x = 0; int f = 1; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
	for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
	x *= f;
}
const int N = 4e5 + 10;
int n, a[N], t[2][N];//, p[N];
bool vis[N];
// set <int> b;
// set <int> s;
priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> q;
int seg[N << 2];
set <int> g;
void pushup(int num) {
	seg[num] = min(seg[ls], seg[rs]);
}
void modify(int num, int l, int r, int x, int y) {
	if (l == r) {
		seg[num] = y;
		return;
	}
	int mid = (l + r) >> 1;
	if (mid >= x) modify(li, x, y);
	else modify(ri, x, y);
	pushup(num);
}
int findpos(int num, int l, int r, int x, int y) {
	if (seg[num] >= y) return -1;
	if (l == r) return l;
	int mid = (l + r) >> 1;
	if (mid > x) {
		int t = findpos(li, x, y);
		if (~t) return t;
	}
	return findpos(ri, x, y);
}
int sub(int x) {
	int g = findpos(1, 1, 2 * n, x, t[1][a[x]]);
	// cout << x << " " << g << " " << a[x] << " " << t[1][a[x]] << endl;
	return g;
}
void add(int x) {
	g.insert(x);
	q.emplace(a[x], x);
}
void build() {
	// puts("!!!");
	// int x = *s.begin();
	// int l = 0, r = n + 1;
	int x = 0;
	while (true) {
		int y = sub(x);
		// cout << " -> " << x << " " << y << endl;
		if (y == -1) break;
		add(y);
		x = y;
		// auto it = s.lower_bound(x);
		// if (it == )
		// if (t[1][a[x]] == x + 1) break;
	}
}
signed main() {
	read(n);
	t[1][0] = 2 * n + 1;
	F(i, 1, n * 2) {
		read(a[i]);
		// cout << " -> " << !!t[0][a[i]] << endl;
		t[!!t[0][a[i]]][a[i]] = i;
		// s.insert(i);
	}
	g.insert(0);
	ms(seg, 0x3f);
	F(i, 1, n) modify(1, 1, 2 * n, t[0][i], t[1][i]);//, cout << "& " << t[0][i] << " " << t[1][i] << endl;
	F(i, 1, n) {
		if (q.empty()) build();
		int x = q.top().second; q.pop();
		// cout << "# " << x << endl;
		cout << a[x] << " " << a[x] << " ";
		// debug << x << " " << a[x] << endl;
		modify(1, 1, 2 * n, x, 1e9);
		// p[t[0][x]] = p[t[1][x]] = i;
		// cout << a[x] << " ";
		g.erase(x);
		int pos = *prev(g.lower_bound(x)), pp = sub(pos);
		// cout << " -> " << pos << " " << pp << endl;
		while (pp != -1 && !g.count(pp)) {
			add(pp);
			pp = sub(pp);
		}
	}
	// F(i, 1, 2 * n) cout << p[i] << " ";
	return 0;
}

提出情報

提出日時
問題 F - Make Adjacent
ユーザ ast123
言語 C++ 20 (gcc 12.2)
得点 800
コード長 2870 Byte
結果 AC
実行時間 288 ms
メモリ 23496 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 800 / 800
結果
AC × 3
AC × 48
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_rand_01.txt, 01_rand_02.txt, 01_rand_03.txt, 01_rand_04.txt, 01_rand_05.txt, 01_rand_06.txt, 01_rand_07.txt, 01_rand_08.txt, 01_rand_09.txt, 01_rand_10.txt, 01_rand_11.txt, 01_rand_12.txt, 01_rand_13.txt, 01_rand_14.txt, 01_rand_15.txt, 02_extreme_01.txt, 02_extreme_02.txt, 02_extreme_03.txt, 02_extreme_04.txt, 02_extreme_05.txt, 02_extreme_06.txt, 02_extreme_07.txt, 02_extreme_08.txt, 02_extreme_09.txt, 02_extreme_10.txt, 02_extreme_11.txt, 02_extreme_12.txt, 02_extreme_13.txt, 02_extreme_14.txt, 02_extreme_15.txt, 02_extreme_16.txt, 02_extreme_17.txt, 02_extreme_18.txt, 02_extreme_19.txt, 02_extreme_20.txt, 02_extreme_21.txt, 02_extreme_22.txt, 02_extreme_23.txt, 03_handmade_01.txt, 03_handmade_02.txt, 03_handmade_03.txt, 03_handmade_04.txt, 03_handmade_05.txt, 03_handmade_06.txt, 03_handmade_07.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 3 ms 9816 KiB
00_sample_02.txt AC 3 ms 9744 KiB
00_sample_03.txt AC 3 ms 9720 KiB
01_rand_01.txt AC 174 ms 12864 KiB
01_rand_02.txt AC 168 ms 12968 KiB
01_rand_03.txt AC 167 ms 12808 KiB
01_rand_04.txt AC 168 ms 12908 KiB
01_rand_05.txt AC 168 ms 12900 KiB
01_rand_06.txt AC 169 ms 12832 KiB
01_rand_07.txt AC 168 ms 13028 KiB
01_rand_08.txt AC 168 ms 12884 KiB
01_rand_09.txt AC 168 ms 12864 KiB
01_rand_10.txt AC 169 ms 13052 KiB
01_rand_11.txt AC 167 ms 13028 KiB
01_rand_12.txt AC 169 ms 12848 KiB
01_rand_13.txt AC 166 ms 12944 KiB
01_rand_14.txt AC 167 ms 12892 KiB
01_rand_15.txt AC 168 ms 12896 KiB
02_extreme_01.txt AC 100 ms 13064 KiB
02_extreme_02.txt AC 173 ms 21184 KiB
02_extreme_03.txt AC 130 ms 12904 KiB
02_extreme_04.txt AC 97 ms 12868 KiB
02_extreme_05.txt AC 156 ms 21072 KiB
02_extreme_06.txt AC 139 ms 12900 KiB
02_extreme_07.txt AC 114 ms 12904 KiB
02_extreme_08.txt AC 288 ms 21100 KiB
02_extreme_09.txt AC 165 ms 12872 KiB
02_extreme_10.txt AC 101 ms 12852 KiB
02_extreme_11.txt AC 173 ms 21020 KiB
02_extreme_12.txt AC 131 ms 12964 KiB
02_extreme_13.txt AC 97 ms 12872 KiB
02_extreme_14.txt AC 157 ms 21080 KiB
02_extreme_15.txt AC 142 ms 12876 KiB
02_extreme_16.txt AC 113 ms 12892 KiB
02_extreme_17.txt AC 286 ms 21084 KiB
02_extreme_18.txt AC 165 ms 12904 KiB
02_extreme_19.txt AC 145 ms 18048 KiB
02_extreme_20.txt AC 145 ms 18052 KiB
02_extreme_21.txt AC 145 ms 18100 KiB
02_extreme_22.txt AC 146 ms 17984 KiB
02_extreme_23.txt AC 145 ms 18032 KiB
03_handmade_01.txt AC 4 ms 9776 KiB
03_handmade_02.txt AC 96 ms 12908 KiB
03_handmade_03.txt AC 97 ms 12960 KiB
03_handmade_04.txt AC 94 ms 12852 KiB
03_handmade_05.txt AC 93 ms 12864 KiB
03_handmade_06.txt AC 162 ms 23408 KiB
03_handmade_07.txt AC 175 ms 23496 KiB