HDU 4417 Super Mario
题解:函数式线段树求区间小于等于k的数有几个,离线做法,首先将所有询问和序列一起离散,然后用函数式线段树处理。
#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200005;
const int MAXN=3000005;
int n,m,tot,data[MAXN],son[MAXN][2],head[MAXN];
map<int,int>M;
int b[N],a[N],l[N],r[N],k[N];
int make(int l,int r){
int t=++tot,mid=(l+r)>>1;
if(l==r)return t;
son[t][0]=make(l,mid);son[t][1]=make(mid+1,r);
return t;
}
int insert(int x,int pos,int l,int r){
int t=++tot,mid=(l+r)>>1;
data[t]=data[pos]+1;
if(l==r)return t;
if(x<=mid)son[t][1]=son[pos][1],son[t][0]=insert(x,son[pos][0],l,mid);
else{son[t][0]=son[pos][0];son[t][1]=insert(x,son[pos][1],mid+1,r);}
return t;
}
int query(int x,int y,int k,int l,int r){
int mid=(l+r)>>1;
if(l==r) return 0;
if(k>=mid)return(query(son[x][1],son[y][1],k,mid+1,r)+data[son[y][0]]-data[son[x][0]]);
else return query(son[x][0],son[y][0],k,l,mid);
}
int main(){
int T,cnt=1;
scanf("%d",&T);
while(T--){
int s=0,t=0; M.clear(); tot=0;
printf("Case %d:\n",cnt++);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[++s]=a[i];}
for(int i=1;i<=m;i++){scanf("%d%d%d",&l[i],&r[i],&k[i]);l[i]++,r[i]++;b[++s]=k[i];}
sort(b+1,b+s+1);
for(int i=1;i<=s;i++)if(!M[b[i]])M[b[i]]=++t;
for(int i=1;i<=n;i++)a[i]=M[a[i]];
for(int i=1;i<=m;i++)k[i]=M[k[i]];
head[0]=make(1,t);
for(int i=1;i<=n;i++)head[i]=insert(a[i],head[i-1],1,t);
for(int i=1;i<=m;i++)printf("%d\n",query(head[l[i]-1],head[r[i]],k[i],1,t));
}return 0;
}
HDU 4417 Super Mario的更多相关文章
- HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 主席树: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 树状数组||主席树
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- HDU 4417 Super Mario(线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 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 (划分树)(二分)
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 (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给你n个数,下标为0到n-1,m个查询,问查询区间[l,r]之间小于等于x的数有多少个 ...
- hdu 4417 Super Mario/树套树
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意很简单,给定一个序列求一个区间 [L, R,]中小于等于H的元素的个数. 好像函数式线段树可 ...
- hdu 4417 Super Mario (主席树)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...
随机推荐
- Mysql中表名作为参数的问题
近期由于程序的异常,导致数据库中创建了大量的表(约4000个),纠结的是表中的数据还都是有用的. 需要合并到一个表中,首先想到的就是使用存储过程来处理,但由于表名都是动态生成的,需要解决在存储过程中处 ...
- 关于NGINX下开启PHP-FPM 输出PHP错误日志的设置(已解决)
最近在本地搭建的LNMP的开发环境.为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示.但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题. n ...
- php分页类及其实现原理
/** * * 实现思路:分页显示拆分 : 1...上页 12 13 14 15 [16] 17 18 19 20 ...100 下页 * * function htmlPart1() : 上页 * ...
- select,poll,epoll之api笔记
参考:http://www.cnblogs.com/Anker/p/3265058.html select /* According to POSIX.1-2001 */ #include <s ...
- [原创]浅谈NT下Ring3无驱进入Ring0的方法
原文链接:浅谈NT下Ring3无驱进入Ring0的方法 (测试环境:Windows 2000 SP4,Windows XP SP2.Windows 2003 未测试) 在NT下无驱进入Ring0是一个 ...
- 深入Android媒体存储服务(一):APP与媒体存储服务的交互
简介: 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文 ...
- 转: ES6异步编程:Generator 函数的含义与用法
转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...
- 前端开发工具—fiddle
- Java中的图形界面编程
前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...
- 差一本CSS 3的书,有兴趣的作者来写
最近出版了一套CSS图书,但是缺一个CSS 3作者,是要独立写一本书的,所以要求作者务必有2年以上的经验,有写作时间和写作爱好 平时写BLOG者优先 有兴趣的可以联系Q:1602943293,验证:写 ...