HDU 4417 Super Mario 主席树查询区间小于某个值的个数
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<vector>
#define LL long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define per(i,j,k) for(int i=j;i>=k;i--)
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
using namespace std;
const int maxx = 1e5+;
vector<int>v;
struct node{
int l,r,w;
}tree[maxx*];
int cnt;
int root[maxx],a[maxx];
int l[maxx],r[maxx],h[maxx];
int getid(int x){
return lower_bound(v.begin(),v.end(),x)-v.begin()+;
}
void inserts(int l,int r,int pre,int &now,int pos,int val){
///新建节点编号
now=++cnt;
///拷贝并更新节点信息
tree[now]=tree[pre];
if (l==r){
tree[now].w+=val;
return ;
}
int mid=(l+r)>>;
if (pos<=mid){
inserts(l,mid,tree[pre].l,tree[now].l,pos,val);
}else {
inserts(mid+,r,tree[pre].r,tree[now].r,pos,val);
}
//维护区间数字的个数目
tree[now].w=tree[tree[now].l].w+tree[tree[now].r].w;
}
int query(int pre,int now,int l,int r,int pos){
if (l==r){
//查询某个区间数字的个数,就是两个版本权值线段树个数的差值
return tree[now].w-tree[pre].w;
}
int mid=(l+r)>>;
if (pos<=mid){
return query(tree[pre].l,tree[now].l,l,mid,pos);
}else {
return tree[tree[now].l].w-tree[tree[pre].l].w+query(tree[pre].r,tree[now].r,mid+,r,pos);
}
}
int main(){
int t;
int n,m;
scanf("%d",&t);
int ca=;
while(t--){
ca++;
printf("Case %d:\n",ca);
cnt=;
scanf("%d%d",&n,&m);
v.clear();
memset(root,,sizeof(root));
memset(tree,,sizeof(tree));
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
v.pb(a[i]);
}
for (int i=;i<=n;i++){
scanf("%d%d%d",&l[i],&r[i],&h[i]);
v.push_back(h[i]);///注意为了防止出错,你需要同时离散高度,防止高度出现问题
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
int sz=v.size();
for (int i=;i<=n;i++){
int x=getid(a[i]);
inserts(,sz,root[i-],root[i],x,);
}
for (int i=;i<=m;i++){
int posc=getid(h[i]);
l[i]++;
r[i]++;
if (posc==)printf("0\n");
else
printf("%d\n",query(root[l[i]-],root[r[i]],,sz,posc));
}
}
return ;
}
HDU 4417 Super Mario 主席树查询区间小于某个值的个数的更多相关文章
- HDU 4417 Super Mario 主席树
分析:找一个区间里小于等于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 ( 划分树+二分 / 树状数组+离线处理+离散化)
题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...
- HDU 4417 Super Mario ( 离线树状数组 )
把数值和查询放在一起从小到大排序,纪录每个数值的位置,当遇到数值时就更新到树状数组中,遇到查询就直接查询该区间和. #include <cstdio> #include <cstri ...
- HDU 4417 Super Mario(划分树+二分)
题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...
- A - 低阶入门膜法 - K-th Number (主席树查询区间第k小)
题目链接:https://cn.vjudge.net/contest/284294#problem/A 题目大意:主席树查询区间第k小. 具体思路:主席树入门. AC代码: #include<i ...
- HDU 4417 Super Mario(主席树 区间不超过k的个数)题解
题意:问区间内不超过k的个数 思路:显然主席树,把所有的值离散化一下,然后主席树求一下小于等于k有几个就行.注意,他给你的k不一定包含在数组里,所以问题中的询问一起离散化. 代码: #include& ...
- 【划分树+二分】HDU 4417 Super Mario
第一次 耍划分树.. . 模板是找第k小的 #include <stdio.h> #include <string.h> #include <stdlib.h> # ...
随机推荐
- Struts_添加客户练习
1.修改CustomerAction,实现ModelDriven接口 2.修改配置文件 3.修改表单提交地址
- linux下对拍
#!/bin/bash t=0; while true; do let "t = $t + 1" printf $t printf ":\n" ./rand & ...
- 【JZOJ3216】【SDOI2013】淘金
╰( ̄▽ ̄)╭ 小 Z在玩一个 叫做<淘金者>的游戏.游戏的世界是一个 二维坐标 .X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共 N*N 块. 一阵风吹过 ...
- win下在虚拟机安装CentOS 7 Linux系统
准备: CentOS 7下载地址(我下的是everthing版本):https://www.centos.org/download/ 一.首先下载安装虚拟机VMware 地址官网下载即可. 二.安装操 ...
- IO流1 --- File类的实例化 --- 技术搬运工(尚硅谷)
构造器1 File(String pathname) //相对路径 File file1 = new File("hello.txt"); //windows绝对路径 File f ...
- 第二周<线性回归>
可行性分析 略 sklearn.linear_model.linear_regression() 一些参数 fit_intercept 布尔型参数,表示是否计算该模型的截距 normalize 布尔型 ...
- yii生成Model出错:yii-gii-generators-model-Generator.json No such file or dictory
讲runtime 这个文件夹添加权限 chmod o+w runtime
- git gc干了啥
前几天在写升级项目的时候发现./git/objects/pack/下的idx和pack文件是只读的,用java在windows下删除会抛异常,然后把只读属性改掉就好了. 于是就想弄清楚这两个文件的作用 ...
- bootStrap表单验证插件的使用
bootStrapValidator插件的使用 1.插件的下载和引用 首先要引入bootstrapValidator插件.链接的地址:https://www.bootcdn.cn/jquery.boo ...
- 【JZOJ4788】【NOIP2016提高A组模拟9.17】序列
题目描述 输入 输出 样例输入 1 5 2 1 3 0 3 2 2 0 1 0 样例输出 1 数据范围 解法 考虑没有模的情况,问题就仅仅只是简单的差分问题(广告铺设): 设r[i]是第i位需要加的次 ...