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> # ...
随机推荐
- Lab2 内存管理(实现细节)
lab2 中的变动 bootloader 的入口发生了改变 bootloader不像lab1那样,直接调用kern_init函数,而是先调用位于lab2/kern/init/entry.S中的kern ...
- Struts_改写客户列表练习
1.CustomerAction修改放入ActionContext 2.list.jsp使用struts标签库
- git命令移动文件夹到另一文件夹
- pycharm最新激活码2017
最新的2017激活码 BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZW ...
- 微信小程序--每个独立的page的page.json只能修改window属性
app.json 配置项列表 app.json文件用来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. window配置 用于设置小程序的状态栏.导航条. ...
- PHPStrom直接在编辑器打开php文件
以下是自己配置PHP+Apache的开发环境,集成环境的话要换第二种方法(看个人配置):PHPStrom 如果希望直接在编辑器打开php文件,要做以下这几步配置. 第一种:非集成环境 1 2 3 第二 ...
- R语言与显著性检验学习笔记
R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...
- 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
EVRT Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30,32,32,3 ...
- spring-cloud-zuul跨域问题解决
问题发现 正常情况下,跨域是这样的: 1. 微服务配置跨域+zuul不配置=有跨域问题 2. 微服务配置+zuul配置=有跨域问题 3. 微服务不配置+zuul不配置=有跨域问题 4. 微服务不配置+ ...
- 2019-8-31-C#-循环的判断会进来几次
title author date CreateTime categories C# 循环的判断会进来几次 lindexi 2019-08-31 16:55:58 +0800 2018-06-14 0 ...