HDU 4417 Super Mario(划分树+二分)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define N 100100
struct node
{
int l,r;
}tree[*N];
int sorted[N];
int lnum[][N];
int val[][N];
void build(int d,int l,int r,int rt)
{
int m,lsame,i,lpos,rpos,same;
tree[rt].l = l;
tree[rt].r = r;
if(l == r) return ;
m = (l+r)>>;
lsame = (m - l + );
for(i = l;i <= r;i ++)
{
if(val[d][i] < sorted[m])
lsame --;
}
lpos = l;
rpos = m+;
same = ;
for(i = l;i <= r;i ++)
{
if(i == l)
lnum[d][i] = ;
else
lnum[d][i] = lnum[d][i-];
if(val[d][i] < sorted[m])
{
lnum[d][i] ++;
val[d+][lpos++] = val[d][i];
}
else if(val[d][i] > sorted[m])
{
val[d+][rpos++] = val[d][i];
}
else
{
if(same < lsame)
{
same ++;
lnum[d][i] ++;
val[d+][lpos++] = val[d][i];
}
else
{
val[d+][rpos++] = val[d][i];
}
}
}
build(d+,lson);
build(d+,rson);
}
int query(int d,int k,int l,int r,int rt)
{
int s,ss,nl,nr,m,rs,rss;
if(l == r)
{
return val[d][l];
}
if(l == tree[rt].l)
{
s = lnum[d][r];
ss = ;
}
else
{
s = lnum[d][r] - lnum[d][l-];
ss = lnum[d][l-];
}
if(s >= k)
{
nl = ss + tree[rt].l;
nr = ss + tree[rt].l + s - ;
return query(d+,k,nl,nr,rt<<);
}
else
{
m = (tree[rt].l + tree[rt].r)>>;
rss = l - tree[rt].l - ss;
rs = r - l + - s;
nl = m + rss + ;
nr = m + rs + rss;
return query(d+,k-s,nl,nr,rt<<|);
}
}
int bin(int l,int r,int key)
{
int str,end,mid,temp;
str = ;end = r-l+;
while(str < end)
{
mid = (str + end + )/;
temp = query(,mid,l,r,);
if(temp > key)
end = mid - ;
else
str = mid;
}
return end;
}
int main()
{
int i,n,m,x,y,k,t,cas = ;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i = ;i <= n;i ++)
{
scanf("%d",&val[][i]);
sorted[i] = val[][i];
}
sort(sorted+,sorted+n+);
build(,,n,);
printf("Case %d:\n",cas++);
for(i = ;i < m;i ++)
{
scanf("%d%d%d",&x,&y,&k);
x ++;
y ++;
if(k > query(,y-x+,x,y,))
printf("%d\n",y-x+);
else if(k < query(,,x,y,))
printf("0\n");
else
printf("%d\n",bin(x,y,k));
}
}
return ;
}
HDU 4417 Super Mario(划分树+二分)的更多相关文章
- HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)
题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...
- HDU 4417 Super Mario(划分树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4417 Super Mario(划分树问题求不大于k的数有多少)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU-4417 Super Mario,划分树+二分!
Super Mario 这个题也做了一天,思路是很清晰,不过二分那里写残了,然后又是无限RE.. 题意:就是查询区间不大于k的数的个数. 思路:裸划分树+二分答案.将区间长度作为二分范围.这个是重点. ...
- HDU 4417 Super Mario ( 离线树状数组 )
把数值和查询放在一起从小到大排序,纪录每个数值的位置,当遇到数值时就更新到树状数组中,遇到查询就直接查询该区间和. #include <cstdio> #include <cstri ...
- HDU 4417 Super Mario 主席树
分析:找一个区间里小于等于h的数量,然后这个题先离散化一下,很简单 然后我写这个题主要是熟悉一下主席树,其实这个题完全可以离线做,很简单 但是学了主席树以后,我发现,在线做,一样简单,而且不需要思考 ...
- HDU 4417 Super Mario 主席树查询区间小于某个值的个数
#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> ...
- HDU 4417 Super Mario (划分树)(二分)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【划分树+二分】HDU 4417 Super Mario
第一次 耍划分树.. . 模板是找第k小的 #include <stdio.h> #include <string.h> #include <stdlib.h> # ...
随机推荐
- css选择器集体声明
<title>静夜思</title><style type="text/css">h1,#two,.red{ color:#ff0000; fo ...
- IE8 不支持html5 placeholder的解决方案
IE8不支持html5 placeholder的解决方法. /** * jQuery EnPlaceholder plug * version 1.0 2014.07.01戈志刚 * by Frans ...
- web iphone css 兼容性
解决IPHONE网页兼容(部分字号变大): body{-webkit-text-size-adjust:none;}
- mybatis整合spring 之 基于接口映射的多对一关系
转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之 基于接口映射的多对一关系. 项目用到俩个表,即studen ...
- springMVC controller间跳转、重定向、传参
转载自:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求:spring MVC框架co ...
- 【python】linux将python改为默认3.4版本
Python3.4默认是安装在/usr/local/lib/python3.4目录下,需要删除默认python link文件,重新建立连接关系. 使用ln -s命令来修改,命令如下: sudo rm ...
- 【USACO】namenum
//开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢 //听了同学的 将5000个dict里的字符串 转换成char型数组(不能直接用int 会越界)直接用输入的数据对着 ...
- 【2016-07-11】Qt远程部署失败,提示"没有那个文件或目录"的解决方法
首先明确一下,这里的部署失败与网络连接.ssh/scp/sftp等无关. 一般出现在删除了远端上的可执行文件,而本地程序未做明显改动时远程部署执行的时候. Qt应用程序输出中的提示信息如下: 究其原因 ...
- ASP.Net核心对象之HttpResponse
简介: HttpResponse是对响应报文进行设置的一个对象.通过context. Response 能够得到HttpResponse对象. context.Response.Charset;//获 ...
- 一、HTML和CSS基础--HTML+CSS基础课程--第4部分
第七章 CSS的继承.层叠和特殊性 继承:CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. 特殊性 权值的规则: 标签 ...