题解:函数式线段树求区间小于等于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的更多相关文章

  1. HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. 主席树:HDU 4417 Super Mario

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. hdu 4417 Super Mario 树状数组||主席树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  4. HDU 4417 Super Mario(线段树)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. HDU 4417 Super Mario(划分树)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. HDU 4417 Super Mario (划分树)(二分)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. HDU 4417 Super Mario(划分树问题求不大于k的数有多少)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. [HDU 4417] Super Mario (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给你n个数,下标为0到n-1,m个查询,问查询区间[l,r]之间小于等于x的数有多少个 ...

  9. hdu 4417 Super Mario/树套树

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意很简单,给定一个序列求一个区间 [L, R,]中小于等于H的元素的个数. 好像函数式线段树可 ...

  10. hdu 4417 Super Mario (主席树)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...

随机推荐

  1. javascript 多行字符串

    javascript 字符串多行 平时一般使用 字符串+,或者[].join('')的方式 同事推荐了这样的形式 ExceptionDivHtml="<div class='gameI ...

  2. SQL Server 日志截断

    截断事务日志是逻辑操作,只是把日志的一部分标记为‘不再需要’所以可以重用这个空间,截断不是物理操作,不会减少磁盘上文件的大小, 要减小物理大小必定要进行收缩. ----------- 有时就算是备份都 ...

  3. Cortex-M3学习日志(三)-- 外部中断0

    无论是哪款单片机应该都有对应的中断的功能,中断在嵌入式系统的地位毋庸置疑.LPC1768微处理器包括4个外部中断,分别是EINT0.EINT1.EINT2.EINT3对应的引脚分别是P2.10~P2. ...

  4. 如何让多个不同版本的jquery库共存

    问题描述:公司的登录接口使用的是jquery1.4.2,因为我要使用一个jquery.pagination的分页控件(jquery1.7.2).如果我使用了1.7.2,登录接口会有问题. <sc ...

  5. poj1547---结构数组

    题意:老师发给每个学生的橡皮泥相同,找出谁抢了谁的橡皮泥 思路:结构数组存储每个学生的橡皮总量,和名字 /* 结构数组存储用户信息--只放名称和体积 while输入循环复用长宽高变量 for循环求所有 ...

  6. 截取字符串一之substring

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Python入门-函数的使用到程序的公布安装

    Python入门-函数的使用到Python的公布安装 本文主要适合有一定编程经验,至少掌握一门编程语言的人查看. 文中样例大多都是简单到认识英文单词就能看懂的水平,主要讲的是Python的总体使用方法 ...

  8. XmlSerializer

    XmlSerializer作用是将对象序列化到 XML 文档中和从 XML 文档中反序列化对象.XmlSerializer 使您得以控制如何将对象编码到 XML 中. 所在的命名空间:System.X ...

  9. asp.net 前台js和后台得到FormView中的控件,以TextBox为例

    一.前台js获取FormView中的控件 js得到前端控件的ID,比如TextBox(这里设置其ID为TextBox1),大家都知道,是document.getElementById("&l ...

  10. sql server 2005 表master..spt_values

    IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #tGOcreate table #t(id int identity,Dt varchar(10) ...