链接

这树着实不好理解啊

讲解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. How to debug Custom Action DLL

    在MSI工程中,经常会遇到这样的情况: MSI 工程需要调用DLL(C++)中的一个函数实现某些特殊或者复杂的功能,通常的做法是在Custom Action 中调用该DLL . 那么在安装过程中,该C ...

  2. Pulltorefresh使用中碰到的问题

    第一 在使用XScrollView布局是,无法在该布局.xml文件,放置内容布局控件,假如放置了会报错, <com.markmao.pulltorefresh.widget.XScrollVie ...

  3. read/write数据读写传输方式(转)

    前言 笔者本打算撰写一篇讲解标准I/O(缓存I/O)的博文,但是发现已经有网友做过同样的工作,并且工作质量上乘,特转载于此. 原文地址http://lenky.info/archives/2012/0 ...

  4. Web前端新人笔记之jquery选择符

    jquery利用了CSS选择符的能力,让我们能够在DOM中快捷而轻松的获取元素或元素集合.本章将介绍以下内容: 1.网页中的元素结构: 2.如何通过CSS选择符在页面中查找元素: 3.扩展jquery ...

  5. 让hyper-v调整console的大小

    在hyper-v中centos的console一直都是1024x768的分辨率,后来找到一种修改分辨率的解决方法 grubby --update-kernel=ALL --args="vid ...

  6. LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本

    PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入: [HOST=www.vpser.net] open_basedir=/home/wwwroot ...

  7. 2014年度辛星css教程夏季版第七节

    本小节我们研究浮动的问题,浮动使得布局更加灵活,虽然我们前面也有关于布局的讲解,但是它们提供的内容还是太有限了,要想获得更强大的布局,还必须使用浮动才能完成更灵活的布局. ***********浮动* ...

  8. 【面试题】百度糯米java工程师面试

    面试经历: 技术题问的比较基础的java知识,有个编程题设计团购秒杀方面的设计,之前没有这种经验做的不好,做完题一个技术经理过来面试,主要问了一下之前做的什么项目,对struts,spring的原理做 ...

  9. UILocalNotification本地通知

    // 执行通知一定要退出应用或挂起应用(进入后台)才能收到通知. 1.在iOS8及其以后版本中使用本地消息需要先获得用户的许可,否则无法成功注册本地消息.因此,我们将询问用户许可的代码片段添加到了ap ...

  10. The partner transaction manager has disabled its support for remote/network transactions.

    http://technet.microsoft.com/en-us/library/cc753510(WS.10).aspx