求一个区间内小于等于limit的数;

主席树模板题。

求出每一个节点的sum;

 #include<cstdio>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
const int maxn=1e5+;
int a[maxn],b[maxn*],cnt,len;
struct Node{int l,r,limit;}ask[maxn];
int Root[maxn];
struct node{int ln,rn,sum;}tree[maxn*];
void build(int &x,int l,int r)
{
++cnt;
x=cnt;
tree[cnt].sum=;
if(l==r) return;
int mid=l+r>>;
build(tree[cnt].ln,l,mid);
build(tree[cnt].rn,mid+,r);
}
void add(int pos,int l,int r,int &x,int y)
{
tree[++cnt]=tree[y];
tree[cnt].sum++;
x=cnt;
int mid=l+r>>;
if(l==r) return;
if(pos<=mid) add(pos,l,mid,tree[cnt].ln,tree[y].ln);
else add(pos,mid+,r,tree[cnt].rn,tree[y].rn);
return;
}
int query(int l,int r,int x,int y,int limit)
{
int mid=l+r>>;
int ans=;
if(l==r){
int tmp=tree[y].sum-tree[x].sum;
return tmp;
}
if(limit>mid){
int left1=tree[x].ln,left2=tree[y].ln;
ans+=tree[left2].sum-tree[left1].sum;
if(limit>mid) ans+=query(mid+,r,tree[x].rn,tree[y].rn,limit);
}
else{
ans+=query(l,mid,tree[x].ln,tree[y].ln,limit);
}
return ans;
}
void init()
{
cnt=;
}
int main()
{
int T;
scanf("%d",&T);
int ccnt=;
while(T--){
init();
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[++cnt]=a[i];
}
for(int i=;i<=m;i++){
scanf("%d%d%d",&ask[i].l,&ask[i].r,&ask[i].limit);
ask[i].l++;ask[i].r++;
b[++cnt]=ask[i].limit;
}
sort(b+,b++cnt);
len=unique(b+,b++cnt)-b-;
build(Root[],,len);
for(int i=;i<=n;i++){
a[i]=lower_bound(b+,b++len,a[i])-b;
add(a[i],,len,Root[i],Root[i-]);
}
printf("Case %d:\n",++ccnt);
for(int i=;i<=m;i++){
ask[i].limit=lower_bound(b+,b++len,ask[i].limit)-b;
if(!ask[i].limit) printf("0\n");
else{
int ans=query(,len,Root[ask[i].l-],Root[ask[i].r],ask[i].limit);
printf("%d\n",ans);
}
}
}
return ;
}

主席树 hdu 4417的更多相关文章

  1. 主席树 hdu 4348

    题意:有一个由n个数组成的序列,有4中操作: 1.C l r d [l,r]这段区间都加上d 2.Q l r 询问[l,r]这段区间的和 3.H l r t 询问之前t时间[l,r]的区间和 4.B ...

  2. dfs序 线段树 dfs序列 主席树

    并查集 #include<stdio.h> ]; void sset(int x) { ;i<=x;i++) stt[i]=i; } int ffind(int x) { if(x= ...

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

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

  4. HDU 4417:Super Mario(主席树)

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意是:给出n个数和q个询问,每个询问有一个l,r,h,问在[l,r]这个区间里面有多少个数是小于等于h的 ...

  5. hdu 4417 Super Mario (主席树)

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

  6. Super Mario HDU 4417 主席树区间查询

    Super Mario HDU 4417 主席树区间查询 题意 给你n个数(编号从0开始),然后查询区间内小于k的数的个数. 解题思路 这个可以使用主席树来处理,因为这个很类似查询区间内的第k小的问题 ...

  7. HDU 4417 Super Mario 主席树

    分析:找一个区间里小于等于h的数量,然后这个题先离散化一下,很简单 然后我写这个题主要是熟悉一下主席树,其实这个题完全可以离线做,很简单 但是学了主席树以后,我发现,在线做,一样简单,而且不需要思考 ...

  8. 主席树:HDU 4417 Super Mario

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

  9. Super Mario HDU - 4417 (主席树)

    Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory ...

随机推荐

  1. Linux C/C++ 字符串逆序

    /*字符串逆序*/ #include <stdio.h> #include <string.h> void nixu(char *str) { ; char tmp; for( ...

  2. django实现简易登录注册

    经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...

  3. Python里的Flask开发环境的搭建

    在已经安装好了Python后,我这里用的是Python3.5,准备进一步学习Flask框架,下面记录搭建Flask环境 这里使用了虚拟环境,在虚拟环境里,最小化的安装Flask. 参考步骤: 1.首先 ...

  4. 一个vue的日历组件

    说明: 1.基于element-ui开发的vue日历组件. 地址 更新: 1.增加value-format指定返回值的格式2.增加头部插槽自定义头部 <ele-calendar > < ...

  5. 4-初识Django Admin

    初识Django Admin Django Admin是Django为我们提供的网站后台管理应用,通常网站,个人博客,CMS等都会有个后台管理界面,这个界面只有管理员权限的用户才能进入管理网站内容.管 ...

  6. EF中的持久化场景

    使用EF实现实体持久化(保存)到数据库有两种情况:在线场景和离线场景. 1.在线场景 在线场景中,context是上下文实例,读写都通过一个context. 这种方案适用于连接本地数据库或同一网络上的 ...

  7. oracle 数据库手动备份和恢复

    一.备份命令: 1.cmd  : exp 2.cmd  :用户名/密码@ip地址/数据库名  如:     yyj/yyj@172.12.5.5/orcl    要导出的数据库 3.回车:输入要输出的 ...

  8. Jarvis OJ - [XMAN]level1 - Writeup

    Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...

  9. NW.js桌面应用开发(一)

    NWjs中文网 Electron中文网 一些需要了解的历史与特性,其实就是 NW.js 和 Electron的争议,建议还是亲自阅读一下各自的官网说明 1.下载SDK版工具 从淘宝NPM镜像下载,速度 ...

  10. 经常犯的错误之递归写不全return

    在写递归函数的时候,只在最后一层写return,中间的过程没有return,导致结果的丢失. 举个例子 LL query(LL i, LL k) { if (sum[i] < k) { ; } ...