답안 #791594

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
791594 2023-07-24T07:48:18 Z khshg Abracadabra (CEOI22_abracadabra) C++14
40 / 100
234 ms 26124 KB
#include<bits/stdc++.h>
using namespace std;

int N, Q;
int cur;
vector<int> A, nxtg, subans;
vector<pair<int, int>> q;
set<array<int, 3>> S;// original segment {L, R};

void shuffle_go() {
	if(cur == N / 2) {
		return;
	}
	auto x = end(S); --x;
	while(x != begin(S) && cur - ((*x)[2] - (*x)[1] + 1) >= N / 2) {
		cur -= ((*x)[2] - (*x)[1] + 1);
		for(int i = (*x)[2]; i >= (*x)[1]; --i) {
			subans.push_back(A[i]);
		}
		x = S.erase(x); --x;
	}
	if(cur == N / 2) {
		return;
	}
	array<int, 3> mv = *x;
	S.erase(x);
	int trsh = cur - N / 2;
	S.insert({mv[0], mv[1], mv[2] - trsh});
	int L = mv[2] - trsh + 1;
	int R = mv[2];
	for(int i = L; i <= R; ++i) {
		int j = min(R, nxtg[i] - 1);
		S.insert({A[i], i, j});
		i = j;
	}
}

int32_t main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> N >> Q;
	cur = N;
	A.resize(N); for(int& u : A) cin >> u;
	q.resize(Q); for(auto& u : q) { cin >> u.first >> u.second; u.first = min(u.first, N); }
	{
		nxtg.resize(N, N);
		vector<int> st;
		for(int i = N - 1; i >= 0; --i) {
			while(!st.empty() && A[st.back()] < A[i]) st.pop_back();
			if(!st.empty()) nxtg[i] = st.back();
			st.push_back(i);
		}
	}
	if(q[0].first == 0) {
		for(auto& u : q) {
			cout << A[u.second - 1] << '\n';
		}
		return 0;
	}
	//first change manually
	for(int i = 0; i < N / 2; ++i) {
		int j = min(nxtg[i] - 1, N / 2 - 1);
		S.insert({A[i], i, j});
		i = j;
	}
	for(int i = N / 2; i < N; ++i) {
		int j = nxtg[i] - 1;
		S.insert({A[i], i, j});
		i = j;
	}
	for(int i = 1; i < q[0].first; ++i) {
		shuffle_go();
	}
	vector<int> wtf;
	for(auto& u : S) {
//		cout << u[0] << '\n';
		for(int i = u[1]; i <= u[2]; ++i) {
			wtf.push_back(A[i]);
		}
	}
	reverse(begin(subans), end(subans));
	for(auto& u : subans) {
	//	cout << u << '\n';
		wtf.push_back(u);
	}
	for(auto& u : q) {
//		cout << u << ' ';
		cout << wtf[u.second - 1] << '\n';
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 171 ms 13520 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 217 ms 23128 KB Output is correct
2 Correct 234 ms 26124 KB Output is correct
3 Correct 182 ms 21520 KB Output is correct
4 Correct 167 ms 17060 KB Output is correct
5 Correct 171 ms 18368 KB Output is correct
6 Correct 156 ms 16072 KB Output is correct
7 Correct 211 ms 19380 KB Output is correct
8 Correct 196 ms 18908 KB Output is correct
9 Correct 219 ms 17484 KB Output is correct
10 Correct 186 ms 17348 KB Output is correct
11 Correct 154 ms 14900 KB Output is correct
12 Correct 148 ms 14772 KB Output is correct
13 Correct 203 ms 17384 KB Output is correct
14 Correct 151 ms 15256 KB Output is correct
15 Correct 181 ms 17676 KB Output is correct
16 Correct 17 ms 3920 KB Output is correct
17 Correct 157 ms 16016 KB Output is correct
18 Correct 130 ms 14144 KB Output is correct
19 Correct 46 ms 5164 KB Output is correct
20 Correct 55 ms 6560 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 33 ms 4876 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 171 ms 13520 KB Output isn't correct
2 Halted 0 ms 0 KB -