提出 #29678743


ソースコード 拡げる

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
#include<queue>
#include<stack>
#include<bitset>
#include<unordered_map>
#include<functional>
#include<map>
#include<iomanip>
#include<limits>
#include<unordered_set>
#include<cmath>
#include <numeric>
#include <array>
#include<utility>
#include <complex>
using namespace std;
#pragma region define
#define M_PI 3.141592653589793238
#define upperbound(v,val) upper_bound(v.begin(),v.end(),val)-v.begin()
#define lowerbound(v,val) lower_bound(v.begin(),v.end(),val)-v.begin()
#define int long long
#define vel vector<long long>
#define vvel vector<vel>
#define rep(i,n) for(int i=0;i<n;i++)
#define sor(v) sort(v.begin(),v.end())
#define mmax(a,b) a=max(a,b)
#define mmin(a,b) a=min(a,b)
#define mkp(a,b) make_pair(a,b)
#define pin pair<int,int>
#define qin pair<pin,int>
#define V vector
#define Endl endl
#define veb vector<bool>
#define fcout cout << fixed << setprecision(15)
#define rev(s) reverse(s.begin(),s.end())
#define lower(h,val) (lower_bound(h.begin(),h.end(),val)-h.begin())
#define upper(h,val) (upper_bound(h.begin(),h.end(),val)-h.begin())
#define vveb V<veb>
#define omajinai cin.tie(0);ios::sync_with_stdio(false);
#define endl "\n"
#define pb push_back
#pragma endregion
int root(int x, vel& pa) {
	if (pa[x] == -1) { return x; }
	int ans = root(pa[x], pa); pa[x] = ans;
	return ans;
}
bool mar(int x, int y, vel& pa) {
	x = root(x, pa);
	y = root(y, pa);
	if (x != y) { pa[x] = y; }
	return (x != y);
}
int gcd(int x, int y) {
	if (x < y) { return gcd(y, x); }
	if (y == 0) { return x; }
	return gcd(y, x % y);
}
int lcm(int x, int y) {
	x = abs(x); y = abs(y);
	return x * (y / gcd(x, y));
}
long long modinv(long long a, long long m) {
	long long b = m, u = 1, v = 0;
	while (b) {
		long long t = a / b;
		a -= t * b; swap(a, b);
		u -= t * v; swap(u, v);
	}
	u %= m;
	if (u < 0) u += m;
	return u;
}
vel dijk(V<V<pin>> way, int st, int inf) {
	int n = way.size();
	vel dist(n, inf); dist[st] = 0;
	priority_queue<pin, vector<pin>, greater<pin>> pq;
	pq.push(mkp(0, st));
	veb is_checked(n, false);
	while (!pq.empty()) {
		pin x = pq.top(); pq.pop();
		int pot = x.second;
		if (!is_checked[pot]) {
			is_checked[pot] = true;
			for (auto y : way[pot]) {
				int nex_dist = x.first + y.second;
				int nex_pot = y.first;
				if (dist[nex_pot] > nex_dist) {
					dist[nex_pot] = nex_dist;
					pq.push(mkp(nex_dist, y.first));
				}
			}
		}
	}
	return dist;
}
V<V<pin>> make_w(vvel v) {
	int n = v.size();
	V<V<pin>> ret(n);
	rep(i, n) {
		for (int x : v[i]) {
			ret[i].push_back(mkp(x, 1));
		}
	}
	return ret;
}
void make_tree(vvel& chi, vel& par, int n) {
	V<V<pin>> way(n);
	rep(i, n - 1) {
		int a, b; cin >> a >> b; a--; b--;
		way[a].push_back(mkp(b, 1));
		way[b].push_back(mkp(a, 1));
	}
	vel dist = dijk(way, 0, n + 1);
	par = vel(n, -1);
	chi = vvel(n);
	rep(i, n) {
		for (auto nex : way[i]) {
			int pot = nex.first;
			if (dist[pot] > dist[i]) { chi[i].push_back(pot); }
			else { par[i] = pot; }
		}
	}
}
void pri(vel& v) {
	if (v.size() == 0) { return; }
	cout << v[0];
	rep(i, v.size() - 1) { cout << " " << v[i + 1]; }
	cout << endl;
	return;
}
vvel disj_min(vel& v) {
	int n = v.size();
	vvel ret(22, vel(n));
	ret[0] = v;
	rep(i, 21) {
		rep(j, n) {
			int nex = j + (1 << i);
			if (nex < n) {
				ret[i + 1][j] = min(ret[i][j], ret[i][nex]);
			}
			else {
				ret[i + 1][j] = ret[i][j];
			}
		}
	}
	return ret;
}
int find_min(vvel& dv, int l, int r) {
	int i = 21;
	while (l + (1 << i) > r) {
		i--;
	}
	while (i >= 0) {
		if (dv[i][l] > dv[i][r - (1 << i)]) {
			l = r - (1 << i);
		}
		else {
			r = l + (1 << i);
		}
		i--;
	}
	return l;
}
V<V<pin>> dbl(V<pin>& v) {
	V<V<pin>> ans(20, V<pin>(v));
	int n = v.size();
	rep(i, 19) {
		rep(j, n) {
			ans[i + 1][j].first = ans[i][ans[i][j].first].first;
			ans[i + 1][j].second = max(ans[i][j].second, ans[i][ans[i][j].first].second);
		}
	}
	return ans;
}
int lca(int s, int t, int diff, V<V<pin>>& pa) {
	if (diff < 0) { return lca(t, s, -diff, pa); }
	int ans = 0;
	rep(i, 19) {
		if ((diff & (1 << i)) != 0) {
			mmax(ans, pa[i][s].second);
			s = pa[i][s].first;
		}
	}
	for (int i = 19; i >= 0; i--) {
		if (pa[i][s] != pa[i][t]) {
			mmax(ans, pa[i][s].second);
			s = pa[i][s].first;
			mmax(ans, pa[i][t].second);
			t = pa[i][t].first;
		}
	}
	if (s != t) {
		mmax(ans, pa[0][s].second);
		mmax(ans, pa[0][t].second);
	}
	return ans;
}
void alp(int n, vel& pr) {
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			pr.push_back(i);
			while (n % i == 0) { n /= i; }
		}
	}
	if (n != 1) { pr.push_back(n); }
}
vel dx = { 0,0,-1,1 };
vel dy = { 1,-1,0,0 };
#define all(a) a.begin(),a.end()
template<typename T>
void mk_uni(V<T>& a) {
	std::sort(a.begin(), a.end());
	a.erase(std::unique(a.begin(), a.end()), a.end());
}
#include <cstdint>

template <std::uint_fast64_t Modulus> class modint {
	using u64 = std::uint_fast64_t;

public:
	u64 a;

	constexpr modint(const u64 x = 0) noexcept : a(x% Modulus) {}
	constexpr u64& value() noexcept { return a; }
	constexpr const u64& value() const noexcept { return a; }
	constexpr modint operator+(const modint rhs) const noexcept {
		return modint(*this) += rhs;
	}
	constexpr modint operator-(const modint rhs) const noexcept {
		return modint(*this) -= rhs;
	}
	constexpr modint operator*(const modint rhs) const noexcept {
		return modint(*this) *= rhs;
	}
	constexpr modint operator/(const modint rhs) const noexcept {
		return modint(*this) /= rhs;
	}
	constexpr modint& operator+=(const modint rhs) noexcept {
		a += rhs.a;
		if (a >= Modulus) {
			a -= Modulus;
		}
		return *this;
	}
	constexpr modint& operator-=(const modint rhs) noexcept {
		if (a < rhs.a) {
			a += Modulus;
		}
		a -= rhs.a;
		return *this;
	}
	constexpr modint& operator*=(const modint rhs) noexcept {
		a = a * rhs.a % Modulus;
		return *this;
	}
	constexpr modint& operator/=(modint rhs) noexcept {
		u64 exp = Modulus - 2;
		while (exp) {
			if (exp % 2) {
				*this *= rhs;
			}
			rhs *= rhs;
			exp /= 2;
		}
		return *this;
	}
};

using mint = modint<998244353>;

using vem = vector<mint>;
using vvem = vector<vem>;
#pragma region mint
vem kai, inv_kai;
void make_kai(int n) {
	kai = vem(n + 1, 1);
	inv_kai = vem(n + 1, 1);
	rep(i, n) { kai[i + 1] = kai[i] * (i + 1); }
	inv_kai[n] = (mint)1 / kai[n];
	for (int i = n; i > 0; i--) { inv_kai[i - 1] = inv_kai[i] * i; }
}
mint mpow(mint a, int n) {
	mint ans = 1;
	while (n) {
		if (n & 1) { ans *= a; }
		a *= a; n /= 2;
	}
	return ans;
}
mint com(int n, int r) {
	if (n < 0 || r < 0 || n < r) { return 0; }
	return kai[n] * inv_kai[r] * inv_kai[n - r];
}
mint per(int n, int r) {
	if (n < 0 || r < 0 || n < r) { return 0; }
	return kai[n] * inv_kai[r];
}
#pragma endregion
struct io_init {
	io_init() {
		cin.tie(nullptr); cout.tie(nullptr);
		std::ios::sync_with_stdio(false);
	}
} io_init;
int sz = (1 << 19);
int ide = 1234567890;
vel seg(sz * 2, ide);
int bina(int a, int b) { return min(a, b); }
void cha(int pot, int val) {
	pot += sz;
	seg[pot] = val; pot >>= 1;
	while (pot != 0) {
		seg[pot] = bina(seg[2 * pot], seg[2 * pot + 1]); pot >>= 1;
	}
}
int cal(int l, int r) {//[l,r)
	l += sz; r += sz;
	int ans = ide;
	while (l < r) {
		if (l & 1) { ans = bina(ans, seg[l]); l++; }
		if (r & 1) { r--; ans = bina(ans, seg[r]); }
		l >>= 1; r >>= 1;
	}
	return ans;
}
vvel all_way;
vvel dist(9,vel(9,0));
int val(vel& board, vel way) {
	rev(way);
	int ans = board[way.back()];
	way.pop_back();
	while (!way.empty()) {
		int op = board[way.back()];
		way.pop_back();
		int num = board[way.back()];
		way.pop_back();
		if (op == 1) { ans += num; }
		else if (op == 2) { ans -= num; }
		else { ans *= num; }
	}
	return ans;
}
map<pair<vel,pin>, pair<vel,pin>> opt_nex;
int cost(int cnt, vel board, int cursor) {
	int ans = 1e8;
	if (cnt == 11) {
		return 0;
	}
	int aim = cnt * (cnt + 1) / 2;
	vel ans_way = {};
	for (vel way : all_way) {
		if (val(board, way) == aim) {
			vel new_board = board;
			for(int x:way) {
				new_board[x]++;
				if (x % 2 == 1) { new_board[x] %= 3; }
			}
			int c = dist[cursor][way[0]]+way.size()+cost(cnt + 1, new_board, way.back());
			if (ans > c) {
				ans = c;
				ans_way = way;
				opt_nex[mkp(board, mkp(cnt, cursor))] = mkp(new_board, mkp(cnt + 1, way.back()));
			}
		}
	}
	/*if (ans < 1e7) {
		cout << "board is ";
		pri(board);
		cout << "cost is";
		cout << ans << " ";
		pri(ans_way);
		cout << endl;
	}*/
	return ans;

}
void dfs(int st, vel& way,veb &visit,vvel &nex) {
	if (way.size() % 2 == 1) {
		all_way.push_back(way);
	}
	for (int to : nex[st]) {
		if (!visit[to]) {
			way.push_back(to);
			visit[to] = true;
			dfs(to, way,visit, nex);
			way.pop_back();
			visit[to] = false;
		}
	}
}
signed main() {
	int q; cin >> q;
	multiset<int> f;
	rep(_, q) {
		int a; cin >> a;
		int x; cin >> x;
		if (a == 1) {
			f.insert(x);
		}
		else {
			int k; cin >> k;
			if (a == 2) {
				auto itr = f.upper_bound(x);
				int ans = 0;
				rep(ss, k) {
					if (itr == f.begin()) { ans = -1; cout << ans << endl; break; }
					itr--;
				}
				if (ans == 0) { cout << *itr << endl; }
			}
			else {
				auto itr = f.lower_bound(x);
				int ans = 0;
				rep(ss, k-1) {
					itr++;
					if (itr == f.end()) { ans = -1; cout << ans << endl; break; }
				}
				if (ans == 0) { cout << *itr << endl; }
			}
		}

	}
	return 0;
	/*vvel nex(9);
	rep(i, 3) {
		rep(j, 3) {
			rep(l, 4) {
				int di = i + dx[l];
				int dj = j + dy[l];
				if (0 <= di && di < 3 && 0 <= dj && dj < 3) {
					nex[3 * i + j].push_back(3 * di + dj);
				}
			}
			rep(s, 3) {
				rep(t, 3) {
					dist[3 * i + j][3 * s + t] = max(abs(i - s),abs(j - t));
				}
			}
		}
	}
	for (int i = 0; i < 9; i += 2) {
		vel v = {i};
		veb visit(9, false); visit[i] = true;
		dfs(i, v,visit,nex);
	}
	vel board(9, 1);
	cout << cost(1, board, 4) << endl;
	auto fi = mkp(board, mkp(1, 4));
	rep(_, 9) {
		fi = opt_nex[fi];
		vel w = fi.first;
		rep(i, 3) {
			rep(j, 3) {
				if ((i + j) % 2 == 0) {
					cout << w[3 * i + j] << " ";
				}
				else {
					if (w[3 * i + j] == 0) { cout << "* "; }
					if (w[3 * i + j] == 1) { cout << "+ "; }
					if (w[3 * i + j] == 2) { cout << "- "; }
				}
			}
			cout << endl;
		}
		cout << "cursor is " << fi.second.second << endl;
	}*/
	return 0;
}


提出情報

提出日時
問題 D - Sequence Query
ユーザ b2563125
言語 C++ (Clang 10.0.0)
得点 0
コード長 10749 Byte
結果 RE
実行時間 307 ms
メモリ 20536 KiB

コンパイルエラー

./Main.cpp:22:9: warning: 'M_PI' macro redefined [-Wmacro-redefined]
#define M_PI 3.141592653589793238
        ^
/usr/include/math.h:777:10: note: previous definition is here
# define M_PI           3.14159265358979323846  /* pi */
         ^
1 warning generated.

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 400
結果
AC × 1
AC × 12
RE × 17
セット名 テストケース
Sample example0.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, add000.txt, add001.txt, add002.txt, add003.txt, add004.txt, add005.txt, example0.txt
ケース名 結果 実行時間 メモリ
000.txt RE 116 ms 11104 KiB
001.txt RE 111 ms 11088 KiB
002.txt RE 112 ms 11104 KiB
003.txt RE 113 ms 11144 KiB
004.txt RE 113 ms 11164 KiB
005.txt RE 113 ms 11088 KiB
006.txt RE 113 ms 10968 KiB
007.txt RE 113 ms 10968 KiB
008.txt RE 112 ms 11160 KiB
009.txt RE 113 ms 11080 KiB
010.txt RE 119 ms 11016 KiB
011.txt RE 113 ms 11192 KiB
012.txt RE 113 ms 11108 KiB
013.txt RE 126 ms 11268 KiB
014.txt RE 119 ms 11008 KiB
015.txt RE 115 ms 11024 KiB
016.txt RE 115 ms 11096 KiB
017.txt AC 299 ms 20208 KiB
018.txt AC 302 ms 20444 KiB
019.txt AC 299 ms 20536 KiB
020.txt AC 252 ms 15724 KiB
021.txt AC 250 ms 15884 KiB
add000.txt AC 295 ms 20208 KiB
add001.txt AC 285 ms 20240 KiB
add002.txt AC 287 ms 20208 KiB
add003.txt AC 307 ms 20292 KiB
add004.txt AC 286 ms 20240 KiB
add005.txt AC 287 ms 20260 KiB
example0.txt AC 12 ms 10764 KiB