#include<cstdio> #include<vector> #include<algorithm> using namespace std; const int MXN = 1e5; int n, m; vector<int> v[MXN * 4]; void insert(int h, int l, int r, int g, int x) { if (r < g || g < l) return; if (l^r) { insert(h * 2 + 1, l, (l + r) / 2, g, x); insert(h * 2 + 2, (l + r) / 2 + 1, r, g, x); } v[h].push_back(x); } int query(int h, int l, int r, int gl, int gr, int x) { if (gr < l || r < gl) return 0; if (gl <= l && r <= gr) return upper_bound(v[h].begin(), v[h].end(), x) - v[h].begin(); return query(h * 2 + 1, l, (l + r) / 2, gl, gr, x) + query(h * 2 + 2, (l + r) / 2 + 1, r, gl, gr, x); } int main() { scanf("%d %d", &n, &m); for (int i = 1, x; i <= n; i++) scanf("%d", &x), insert(0, 1, n, i, x); for (int i = 0; i < n * 4; i++) sort(v[i].begin(), v[i].end()); for (int i = 0, x, y, z; i < m; i++) { scanf("%d %d %d", &x, &y, &z); int l = -1e9, r = 1e9, mid; while (l <= r) { mid = (l + r) / 2; if (query(0, 1, n, x, y, mid) < z) l = mid + 1; else r = mid - 1; } printf("%d\n", l); } return 0; }
7469번: K번째 숫자
https://www.acmicpc.net/problem/7469
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기