Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用了划分树-157MS AC!#include <stdio.h> #include <stdlib.h> #include <algorithm> using std::sort; #define MAX_N 100001 struct tree_node { int l, r; }; tree_node tt[MAX_N << 2]; int sorted[MAX_N]; int tl[20][MAX_N]; int val[20][MAX_N]; int n, m; inline void swap(int& a, int& b) { int t = a; a = b, b = t; } void build(int l, int r, int d, int v) { tt[v].l = l, tt[v].r = r; if (l == r) return ; int mid = (l + r) >> 1, ls = mid - l + 1, ml = sorted[mid]; for (int i = l; i <= r; i++) if (val[d][i] < ml) ls--; int lp = l, rp = mid + 1, sa = 0; for (int i = l; i <= r; i++) { if (i == l)tl[d][i] = 0; else tl[d][i] = tl[d][i - 1]; if (val[d][i] < ml) tl[d][i]++, val[d + 1][lp++] = val[d][i]; else if (val[d][i] > ml) val[d + 1][rp++] = val[d][i]; else if (sa < ls) sa++, tl[d][i]++, val[d + 1][lp++] = ml; else val[d + 1][rp++] = ml; } build (l, mid, d + 1, v << 1); build (mid + 1, r, d + 1, (v << 1) | 1); } int query(int l, int r, int k, int d, int v) { if (l == r) return val[d][l]; int s, ss, nl, nr; if (l == tt[v].l) s = tl[d][r], ss = 0; else s = tl[d][r] - tl[d][l - 1], ss = tl[d][l - 1]; if (s >= k) { nl = tt[v].l + ss; nr = tt[v].l + ss + s - 1; return query (nl, nr, k, d + 1, v << 1); } else { int mid = (tt[v].l + tt[v].r) >> 1; int bb = l - tt[v].l - ss; int b = r - l + 1 - s; nl = mid + bb + 1; nr = mid + bb + b; return query (nl, nr, k - s, d + 1, (v << 1) | 1); } } int main(void) { freopen ("1442.in", "r", stdin); freopen ("1442.out", "w", stdout); while (scanf ("%d%d", &n, &m) != EOF) { for (int i = 1; i <= n; i++) { scanf ("%d", sorted + i); val[0][i] = sorted[i]; } sort (sorted + 1, sorted + 1 + n); build (1, n, 0, 1); for (int i = 1, x; i <= m; i++) { scanf ("%d", &x); printf ("%d\n", query(1, x, i, 0, 1)); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator