HDU 4417 Super Mario 主席树
题意:
有一个长度为\(n(1 \leq n \leq 10^5)\)的序列\(a\)
询问区间\([l,r]\)中不超过\(h\)的数字的个数
分析:
离线查询,将所有的\(a_i\)和\(h_i\)离散化,然后直接查询就可以了。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn = 100000 + 10;struct Node
{int lch, rch, sum;
};int sz, root[maxn];
Node T[maxn << 5];int n, m;
int a[maxn], b[maxn * 2], tot;
int l[maxn], r[maxn], h[maxn];int newnode() {++sz;T[sz].lch = T[sz].rch = T[sz].sum = 0;return sz;
}int insert(int pre, int L, int R, int pos) {int rt = newnode();T[rt].lch = T[pre].lch;T[rt].rch = T[pre].rch;T[rt].sum = T[pre].sum + 1;if(L < R) {int M = (L + R) / 2;if(pos <= M) T[rt].lch = insert(T[pre].lch, L, M, pos);else T[rt].rch = insert(T[pre].rch, M+1, R, pos);}return rt;
}int query(int s, int t, int L, int R, int v) {if(v >= R) return T[t].sum - T[s].sum;int M = (L + R) / 2;if(v <= M) return query(T[s].lch, T[t].lch, L, M, v);return T[T[t].lch].sum - T[T[s].lch].sum + query(T[s].rch, T[t].rch, M+1, R, v);
}int main()
{int _; scanf("%d", &_);for(int kase = 1; kase <= _; kase++) {printf("Case %d:\n", kase);scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) {scanf("%d", a + i);b[i - 1] = a[i];}tot = n;for(int i = 1; i <= m; i++) {scanf("%d%d%d", l + i, r + i, h + i);b[tot++] = h[i];}sort(b, b + tot);tot = unique(b, b + tot) - b;for(int i = 1; i <= n; i++)a[i] = lower_bound(b, b + tot, a[i]) - b + 1;for(int i = 1; i <= m; i++)h[i] = lower_bound(b, b + tot, h[i]) - b + 1;sz = 0;for(int i = 1; i <= n; i++)root[i] = insert(root[i - 1], 1, tot, a[i]);for(int i = 1; i <= m; i++) {r[i]++;printf("%d\n", query(root[l[i]], root[r[i]], 1, tot, h[i]));}}return 0;
}
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/5290128.html
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(主席树/线段树+离线)
题目链接:点击查看 题目大意:给出由 n 个数的数列,再给出 m 次查询,每次查询需要输出 [ l , r ] 内小于等于 h 的数有多少个 题目分析:大晚上睡不着觉随便做做题,发现这个题目原来可以用 ...
- HDU 4417 Super Mario(线段树离线处理/主席树)
Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...
- 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(划分树问题求不大于k的数有多少)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 4417 Super Mario 划分树+二分
http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给定一个长度为n的序列,求区间[L,R]中小于h的个数: 思路: 分三种情况: 1:如果该区间最小 ...
- HDU 4417 Super Mario(离线 + 树状数组)
题目: Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded ...
- 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 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...
- HDU 4417 Super Mario(线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
最新文章
- 一致性代码段和非一致性代码段【转】
- php image 转 data uri 图片 (Image Data URIs with PHP)
- 监听浏览器的返回事件,禁止浏览器返回
- 在php中使用CKEDITOR在线编辑器
- python列表的存储结构_在python列表类型结构中合理地存储10亿个以上的值
- github第一步之初始化操作
- 【网络流24题】分配问题 最小最大费用最大流
- flashfxp中文破解版|flashfxp v5.4绿色破解版下载免注册码(强大的fxp/ftp客户端)
- 无线网络有信号显示未连接网络连接服务器,路由器无线网络受限制或无连接怎么办...
- Java实战项目《瑞吉外卖》
- 《缠中说禅108课》1:不会赢钱的经济人,只是废人
- 什么是基类,什么是父类
- Rich feature hierarchies for accurate object detection and semantic segmentation
- Java练习题——抽象类、方法以及接口
- 利用ffmpeg将avi格式文件转成mp4格式
- 人工智能 | ShowMeAI资讯日报 #2022.06.29
- 基于MATLAB的车牌识别研究
- 制作SD启动卡(含FAT32和EXT4两个分区)
- HNOI 2012 射箭 半平面交
- adb命令报错 error: no devices found 的解决办法