题意:

给定一个序列,询问区间中最大数减去最小数的结果

和2104差不多, 代码贴过来就OK了

 #include <iostream>
#include <algorithm>
using namespace std;
const int M = ;
int toLeft[][M], tree[][M], sorted[M]; void build(int level, int left, int right)
{
if (left == right) return;
int i, mid = (left + right) >>;
int suppose = mid - left + ;
for (i=left; i<=right; i++)
if (tree[level][i] < sorted[mid])
suppose--;
int lpos = left, rpos = mid+;
for (i=left; i<=right; i++)
{
if (i == left)
toLeft[level][i] = ;
else
toLeft[level][i] = toLeft[level][i-];
if (tree[level][i] < sorted[mid])
{
toLeft[level][i]++;
tree[level+][lpos++] = tree[level][i];
}
else if (tree[level][i] > sorted[mid])
{
tree[level+][rpos++] = tree[level][i];
}
else
{
if (suppose != )
{
suppose--;
toLeft[level][i]++;
tree[level+][lpos++] = tree[level][i];
}
else
tree[level+][rpos++] = tree[level][i];
}
}
build(level+, left, mid);
build(level+, mid+, right);
} int query(int level, int left, int right, int qleft, int qright, int k)
{
if (qleft == qright)
return tree[level][qright];
int s, ss, mid = (left + right)>>;
if (left == qleft)
{
s = ;
ss = toLeft[level][qright];
}
else
{
s = toLeft[level][qleft-];
ss = toLeft[level][qright] - s;
}
int newl, newr;
if (k <= ss)
{
newl = left + s;
newr = left + s + ss -;
return query(level+, left, mid, newl, newr, k);
}
else
{
newl = mid-left++qleft-s;
newr = mid-left++qright-s-ss;
return query(level+, mid+, right, newl, newr, k-ss);
}
} int main()
{
int n, m;
int i;
while (scanf("%d%d", &n, &m) == )
{
for (i=; i<=n; i++)
{
scanf("%d", &tree[][i]);
sorted[i] = tree[][i];
}
sort(sorted+, sorted+n+);
build(,,n);
int ql, qr, k;
for (i=; i<m; i++)
{
scanf("%d%d", &ql, &qr);
printf("%d\n", query(, , n, ql, qr, qr-ql+)-query(, , n, ql, qr, )); }
}
return ;
}

poj3264 划分树的更多相关文章

  1. [划分树] POJ 2104 K-th Number

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 51732   Accepted: 17722 Ca ...

  2. poj 2104 K-th Number (划分树入门 或者 主席树入门)

    题意:给n个数,m次询问,每次询问L到R中第k小的数是哪个 算法1:划分树 #include<cstdio> #include<cstring> #include<alg ...

  3. hdu2665 && poj2104划分树

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 47066   Accepted: 15743 Ca ...

  4. poj 2104:K-th Number(划分树,经典题)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 35653   Accepted: 11382 Ca ...

  5. sdut 2610:Boring Counting(第四届山东省省赛原题,划分树 + 二分)

    Boring Counting Time Limit: 3000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述     In this problem you a ...

  6. HDU 4251 --- 主席树(划分树是正解)

    题意:查询区间中位数 思路:模板题,相当于区间第K大的数,主席树可以水过,但划分树是正解.但还没搞明白划分树,先上模板 #include <iostream> #include <c ...

  7. HDU 4417 (划分树+区间小于k统计)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给定一个区间,以及一个k值,求该区间内小于等于k值的数的个数.注意区间是从0开始的 ...

  8. POJ 2104 K-th Number(划分树)

    题目链接 参考HH大神的模版.对其中一些转移,还没想清楚,大体明白上是怎么回事了,划分树就是类似快排,但有点点区别的.多做几个题,慢慢理解. #include <cstdio> #incl ...

  9. hdu4417 划分树+二分

    //Accepted 14796 KB 453 ms //划分树 //把查询的次数m打成n,也是醉了一晚上!!! //二分l--r区间第k大的数和h比较 #include <cstdio> ...

随机推荐

  1. appium版本之谜

    关于appium网上提到的版本是一头雾水,现解释如下: 首先,官网下载的 appium-desktop-Setup-1.3.1.exe是appium桌面版,将appium服务器配置可视化. 而网上提到 ...

  2. c++中stl----vector

    1 vector是啥玩意 (1)可以使用下标访问个别的元素 (2)迭代器可以按照不同的方式遍历 (3)可以在容器的末尾增加或者删除元素 2 容器大小和容器的容量区别 (1)大小是元素的个数,容量是分配 ...

  3. CSS3 制作魔方 - 相关立体样式

    最好的实践,就是给定一个实践的目标去实践. 目标:利用 CSS3 的一些特性,绘制一个魔方,要可以玩转的那种,即上下左右每一层都可以独立旋转.效果如下: 为了完成此效果,将使用到以下相关概念和样式:坐 ...

  4. java 大数详细讲解

    介绍 java中用于操作大叔的类主要有俩种 第一个是BigInteger,代表大整数.第二个是BigDecimal,代表大浮点数.两种类的操作方法类似,所以我们只讲解BigInterger的用法 基本 ...

  5. HDU4791【杂】

    题意: 给你一个从0开始的区间si,每个区间是前闭后开,[ s[i] , s[i+1] ), 然后再给你个一个pi,代表你在区间[ s[i] , s[i+1] )里面买东西的单价是pi,给出的s1一定 ...

  6. css div平移淡入淡出

    <!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; backg ...

  7. ADO学途 two day

    代码实现的参照性在学习程序中占了关键比重,最基本的都一直无法运行成功,那就无法深入 研究.实现winfrom功能的要点之一实践中获取原理:不清楚代码的一些原理,即使copy过来,大多也 存无法运行的情 ...

  8. Java语言规范 第3章 词法

  9. PostgreSQL - 怎么将时间转换成秒

    保留原来的毫秒值 select extract(epoch from '03:21:06.678'::time); 这个extract(epoch from )函数得到的是时间是秒单位,如果需要毫秒值 ...

  10. 测试 | 单元测试工具 | JUnit | 参数化

    被测试类: package project; public class MyCalendar2 { public int getNumberOfDaysInMonth(int year, int mo ...