POJ 2104 K-th Number——分块平方分割
2018-02-13 01:08
357 查看
区间推荐左闭右开#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 1e5+10;
const int len = 1000;
int n, m, a[maxn], sa[maxn];
vector<int> v[maxn/len];
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
sa[i] = a[i];
v[i/len].push_back(a[i]);
}
sort(sa, sa+n);
for (int i = 0; i < n / len; i++) sort(v[i].begin(), v[i].end());
int l, r, k;
while (m--) {
scanf("%d %d %d", &l, &r, &k); l--;
int ll = -1, rr = n-1;
while (rr - ll > 1) {
int mid = (ll + rr)/2;
int x = sa[mid], y = 0;
int lll = l, rrr = r;
while (lll < rrr && lll % len != 0) if (a[lll++] <= x) y++;
while (lll < rrr && rrr % len != 0) if (a[--rrr] <= x) y++;
for (; lll < rrr; lll += len) {
int index = lll/len;
y += upper_bound(v[index].begin(), v[index].end(), x) - v[index].begin();
}
if (y >= k) rr = mid;
else ll = mid;
}
printf("%d\n", sa[rr]);
}
return 0;
}
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 1e5+10;
const int len = 1000;
int n, m, a[maxn], sa[maxn];
vector<int> v[maxn/len];
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
sa[i] = a[i];
v[i/len].push_back(a[i]);
}
sort(sa, sa+n);
for (int i = 0; i < n / len; i++) sort(v[i].begin(), v[i].end());
int l, r, k;
while (m--) {
scanf("%d %d %d", &l, &r, &k); l--;
int ll = -1, rr = n-1;
while (rr - ll > 1) {
int mid = (ll + rr)/2;
int x = sa[mid], y = 0;
int lll = l, rrr = r;
while (lll < rrr && lll % len != 0) if (a[lll++] <= x) y++;
while (lll < rrr && rrr % len != 0) if (a[--rrr] <= x) y++;
for (; lll < rrr; lll += len) {
int index = lll/len;
y += upper_bound(v[index].begin(), v[index].end(), x) - v[index].begin();
}
if (y >= k) rr = mid;
else ll = mid;
}
printf("%d\n", sa[rr]);
}
return 0;
}
相关文章推荐
- POJ2104_K-th Number_归并树|二分 ||平方分割的分桶法|二分
- 【POJ - 2104 】K-th Number 【分块 (平方分割)+二分】
- POJ 2104 K-th Number(区间第k大数)(平方分割,归并树,划分树)
- (平方分割)POJ 2104 K-th Number
- K-th Number (POJ - 2104 )(平方分割)
- K-th Number POJ - 2104 平方分割/线段树
- poj 2104 -- kth number 平方分割法例题
- POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)
- POJ 2104 —— 平方分割 || 归并树 || 划分树(未完)
- [poj 2104 K-th Number] 主席树 区间第K大
- poj 2104 K-th Number(划分树)
- poj 2104 K-th Number(主席树,静态第k小)
- poj 2104 K-th Number 函数式线段树
- POJ2104 K-th Number (子区间内第k大的数字)【划分树算法模板应用】
- POJ 2104(K-th Number-区间第k大-主席树)
- POJ 2104 K-th Number 笔记
- poj 2104 K-th Number 主席树
- poj2104 K-th Number
- POJ 2104:K-th Number (划分树)
- POJ 2104 K-th Number 主席树