博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2761 Feed the dogs
阅读量:6610 次
发布时间:2019-06-24

本文共 1624 字,大约阅读时间需要 5 分钟。

POJ_2761

    本来想搜一下SBT的题练一下昨天刚学的SBT的,但这种查询静态区间内的kth number的题目还是用划分树更好写一些,所以就用划分树写了,就当是复习一下前几天学的划分树了。

#include
#include
#include
#define MAXD 100010 int N, M, rank[20][MAXD], sa[MAXD], a[MAXD], h[20][MAXD]; int cmp(const void *_p, const void *_q) {
int *p = (int *)_p, *q = (int *)_q; if(a[*p] == a[*q]) return *p - *q; return a[*p] < a[*q] ? -1 : 1; } void init() {
int i, j, k; for(i = 1; i <= N; i ++) {
scanf("%d", &a[i]); sa[i] = i; } qsort(sa + 1, N, sizeof(sa[0]), cmp); } void build(int x, int y, int d) {
if(x == y) return ; int i, p = 0, mid = (x + y) / 2; for(i = x; i <= y; i ++) {
if(rank[d][i] <= mid) {
rank[d + 1][x + p] = rank[d][i]; ++ p; } else rank[d + 1][mid + i - x + 1 - p] = rank[d][i]; h[d][i] = p; } build(x, mid, d + 1); build(mid + 1, y, d + 1); } int search(int x, int y, int tx, int ty, int d, int k) {
if(x == y) return a[sa[rank[d][x]]]; int n, m, mid = (x + y) / 2; n = tx == x ? 0 : h[d][tx - 1]; m = h[d][ty]; if(k <= m - n) return search(x, mid, x + n, x + m - 1, d + 1, k); else return search(mid + 1, y, mid + 1 + tx - x - n, mid + 1 + ty - x - m, d + 1, k - m + n); } void solve() {
int i, j, k, x, y; for(i = 1; i <= N; i ++) rank[0][sa[i]] = i; build(1, N, 0); for(i = 0; i < M; i ++) {
scanf("%d%d%d", &x, &y, &k); printf("%d\n", search(1, N, x, y, 0, k)); } } int main() {
while(scanf("%d%d", &N, &M) == 2) {
init(); solve(); } return 0; }

转载地址:http://cxiso.baihongyu.com/

你可能感兴趣的文章
mysql for Mac 下创建数据表中文显示为?的解决方法
查看>>
Glibc 和 uClibc
查看>>
VMware 虚拟机的虚拟磁盘编程知识点扫盲之二
查看>>
vs2012中自带IIS如何让其他电脑访问
查看>>
关于termux在手机上搭载Linux系统,python,ssh
查看>>
Redux:异步操作
查看>>
Mysql学习第三课-分析二进制日志进行增量备份和还原
查看>>
2-11
查看>>
Appium IOS
查看>>
POJ1961 Period [KMP应用]
查看>>
CSS hack
查看>>
IT项目管理工具探讨之_项目群管理
查看>>
如何在 Android 手机上安装 Ubuntu 13.04
查看>>
HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
查看>>
topcoder srm 465 div1
查看>>
C语言 scanf()和gets()函数的区别
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
Spring 中 ApplicationContext 和 BeanFactory 的区别
查看>>
Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明【转】
查看>>