链接

这树着实不好理解啊

讲解http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html

对于找K值 右区间的确定不是太理解。。先当模板贴着吧

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 100010
int tree[][N],sum[][N];//每层的数 及每层截止到i会放进左子树的个数
int cu[N],xu[N];//原数据 及排序后的数据
void build(int c,int l,int r)
{
int i,m = (l+r)>>;
int o = m-l+,rp = m+,lp = l;
for(i = l ; i <= m ; i++)//左子树中与xu[m]相同的个数
if(xu[i]<xu[m])
o--;
for(i = l ; i <= r ; i++)
{
if(i==l)
sum[c][i] = ;
else
sum[c][i] = sum[c][i-];//维护一下 到I为止被分配到左子树中的个数
if(tree[c][i]==xu[m])
{
if(o)
{
sum[c][i]++;
o--;
tree[c+][lp++] = xu[m];//分配到左子树中
}
else
tree[c+][rp++] = tree[c][i];
}
else if(tree[c][i]<xu[m])
{
sum[c][i]++;
tree[c+][lp++] = tree[c][i];
}
else
tree[c+][rp++] = tree[c][i];//分配到右子树中
}
if(l==r) return ;
build(c+,l,m);
build(c+,m+,r);
}
int query(int a,int b,int k,int c,int l,int r)
{
if(l==r)
{
return tree[c][l];
}
int m = (l+r)>>;
int s,ss;
if(a==l)//这里特殊处理一下 sum没初始化 不然不处理应该也可以
{
s = ;
ss = sum[c][b];
}
else
{
s = sum[c][a-];
ss = sum[c][b]-s;
}
if(k<=ss)
{
return query(l+s,l+s+ss-,k,c+,l,m);
}
else
return query(m-l++a-s,m-l++b-s-ss,k-ss,c+,m+,r); }
int main()
{
int i,n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i = ; i <= n ; i++)
{
scanf("%d",&cu[i]);
tree[][i] = cu[i];
xu[i] = cu[i];
}
sort(xu+,xu+n+);
build(,,n);
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int ans = query(a,b,c,,,n);
printf("%d\n",ans);
}
}
return ;
}

poj2761Feed the dogs(划分树-区间K值)的更多相关文章

  1. poj2104 划分树 区间K大 在线 无修改

    博主sbit....对于高级数据结构深感无力,然后这些东西在OI竟然烂大街了,不搞就整个人都不好了呢. 于是我勇猛的跳进了这个大坑 ——sbit 区间K大的裸题,在线,无修改. 可以用归并树(\(O( ...

  2. hdu2852KiKi's K-Number(区间K值)

    http://acm.hdu.edu.cn/showproblem.php?pid=2852 区间K值写错了... #include <iostream> #include<cstd ...

  3. 【bzoj4695】最假女选手 线段树区间最值操作

    题目描述 给定一个长度为 N 序列,编号从 1 到 N .要求支持下面几种操作:1.给一个区间[L,R] 加上一个数x 2.把一个区间[L,R] 里小于x 的数变成x 3.把一个区间[L,R] 里大于 ...

  4. 【bzoj4355】Play with sequence 线段树区间最值操作

    题目描述 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a[V]都赋值为C. 2)给出参数U,V,C,对于区间[U,V]里的每个数 ...

  5. 【hdu5306】Gorgeous Sequence 线段树区间最值操作

    题目描述 给你一个序列,支持三种操作: $0\ x\ y\ t$ :将 $[x,y]$ 内大于 $t$ 的数变为 $t$ :$1\ x\ y$ :求 $[x,y]$ 内所有数的最大值:$2\ x\ y ...

  6. HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)

    HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧) 题意分析 题目大意:一个h*w的公告牌,要在其上贴公告. 输入的是1*wi的w值,这些是公告的尺寸. 贴公告 ...

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

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

  8. HDU-1754I Hate It 线段树区间最值

    这道题比较基本,就是用线段树维护区间最值,可以算是模板吧-.. I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768 ...

  9. poj2104 主席树 区间K大 在线 无修改

    关于主席树: 主席树(Chairman Tree)是一种离线数据结构,使用函数式线段树维护每一时刻离散之后的数字出现的次数,由于各历史版本的线段树结构一致,可以相减得出区间信息,即该区间内出现的数字和 ...

随机推荐

  1. 用pelican搭建完美博客

    前面有文章介绍本站采用了Python编写的Pelican静态生成博客系统, 之所以没有使用当前很火的Jekyll, 是因为它是Ruby编写, 而我又对Ruby没有啥兴趣, 所以还是选择了使用了我熟悉的 ...

  2. 在不同版本的 IIS 上使用 ASP.NET MVC

    ASP.NET MVC Framework 依赖于 URL 路由.为了利用 URL 路由,可能不得不在 Web 服务器上执行额外的配置步骤.这些步骤取决于 Internet Information S ...

  3. Eclipse恢复初始界面&打开视图

    恢复初始界面: 单击菜单栏的windows主菜单,在子菜单里选择 Reset Perspective 会弹出各对话框 ,点 ok就可以了 打开视图:Windows->Show View 其中Ot ...

  4. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  5. 九度OJ 朋友圈 -- 并查集

    题目地址:http://ac.jobdu.com/problem.php?pid=1526 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友.. ...

  6. centos 6.4 samba 权限 selinux权限配置

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100444.html(参考) SELINUX 策略 配置好samba后, 输入 ...

  7. linux RedHat6.4下nginx安装

    安装rpm 检测是否有已安装rpm包: rpm–qa | grep pcre rpm–qa | grep zlib rpm–qa | grep openssl 若没有则需安装(这些包可以在redhat ...

  8. ASP.Net MVC 生成安全验证码

    ---------html <td>验证码:</td>            <td>                <img src="/Logi ...

  9. 【转】C#.net拖拽实现获得文件路径

    C#.net拖拽实现获得文件路径 作者Attilax ,  EMAIL:1466519819@qq.com 思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), ...

  10. Javascript代码摘录

    判断浏览器窗口高度 if (document.documentElement.clientHeight <800) { var elm = document.getElementById('Di ...