problem

solution

  • 主席树查询区间比k小的数的个数
  • 建树之后直接在目标区间的主席树内将 H 作为挡板递归计数。
#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
typedef long long LL;
const int maxn = 100010;//离散化
int a[maxn], b[maxn], num;
int getidx(int v){ return lower_bound(b+1,b+num+1,v)-b; }//主席树,查询区间比k小的数的个数
struct HJTTree{typedef long long LL;#define maxn 100010struct node{ int sum, l, r; }hjt[maxn*40];int rt[maxn], cnt = 0;void init(){ cnt = 0; }inline int CreateNode(int sum, int l, int r){int idx = ++cnt;hjt[idx].sum = sum;hjt[idx].l = l;hjt[idx].r = r;return idx;}void insert(int &p, int pp, int pos, int l, int r){p = CreateNode(hjt[pp].sum+1, hjt[pp].l, hjt[pp].r);if(l == r)return ;int mid = l+r>>1;if(pos <= mid)insert(hjt[p].l, hjt[pp].l, pos, l, mid);else insert(hjt[p].r, hjt[pp].r, pos, mid+1,r);}int query(int u, int v, int h, int l, int r){if(r <= h)return hjt[v].sum-hjt[u].sum;int mid = l+r>>1;if(h <= mid)return query(hjt[u].l, hjt[v].l, h, l, mid);else return query(hjt[u].r,hjt[v].r, h, mid+1, r)+hjt[hjt[v].l].sum-hjt[hjt[u].l].sum;}
}hjt;int main(){IOS;int T;  cin>>T;while(T--){int n, m;  cin>>n>>m;for(int i = 1; i <= n; i++){cin>>a[i];  b[i] = a[i];}sort(b+1,b+n+1);num = unique(b+1,b+n+1)-(b+1);hjt.init();for(int i = 1; i <= n; i++){hjt.insert(hjt.rt[i], hjt.rt[i-1], getidx(a[i]), 1, num);}while(m--){int l, r, h;  cin>>l>>r>>h;// l++; r++;h = upper_bound(b+1,b+num+1,h)-b;if(h != 1)cout<<hjt.query(hjt.rt[l-1], hjt.rt[r], h-1, 1, num)<<"\n";else cout<<"0\n";}}return 0;
}

【代码源 Div1 - 108】#464. 数数(主席树,区间比k小的数的个数)HDU4417相关推荐

  1. POJ 2104 K-th Number 主席树(区间第k大)

    题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...

  2. python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...

    python实现递归和分治 一.开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:py ...

  3. html5数组查找第二大数,2021-06-29:在两个都有序的数组中找整体第K小的数。

    2021-06-29:在两个都有序的数组中找整体第K小的数. 福大大 答案2021-06-29: 1.A和B长度不等的时候,需要把A和B的长度变成相等. A是短数组,B是长数组. 第k小的数,k从1开 ...

  4. 7-1 找第k小的数(反思),a++和++a的区别,运算符优先级,递归分制思想

    作者 陈晓梅 单位 广东外语外贸大学 设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示 函数int partition(int a[],i ...

  5. 在两个已经排好序的数组里找出第K小的数

    前言: 这道题是一道非常常见的面试题,也是一道能够考察一个人的编程能力和算法的一道题.如果要求复杂度为 O(k), 是比较容易做出来的,但是,一般来讲,面试官要求给出更低复杂度的算法.网上有很多不同的 ...

  6. 第K小的数BFPRT算法

    介绍 BFPRT是解决求一个数组中第K小的数的算法,可以时间O(N)的时间复杂度,而使用排序求第K小的数的算法的时间复杂度为O(NlogN),因此BFPRT算法更加高效 思想 (1)分组:将原数组每五 ...

  7. 7-1 找第k小的数 (20 分)

    设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示:函数int partition(int a[],int left,int right)的 ...

  8. 算法导论:快速找出无序数组中第k小的数

    题目描述: 给定一个无序整数数组,返回这个数组中第k小的数. 解析: 最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1). ...

  9. 分治算法求解列表中第k小的数

    分治算法地思想就是将复杂问题分解为简单的子问题,然后寻求子问题的地归结,并组合各个子问题的解一起得到最终复杂问题的解. 针对求解列表中第k小的数,暴力拆解法可以将列表排序然后根据索引求出列表中第k小的 ...

最新文章

  1. Unity iPhone Touch Animation Tutorial,untiy3d iphone简单动画开发教程
  2. android volatile的使用
  3. Apache详细介绍 - [ Apache v2.4.10 for Windows ]
  4. [react] 有用过react的Fragment吗?它的运用场景是什么
  5. 20200506:最低票价(leetcode983)
  6. python死锁案例_Python 多线程死锁
  7. 在应用中集成科大讯飞的语音识别技术
  8. CC2530定时器唤醒
  9. 关于鸡兔同笼的python程序_python解决鸡兔同笼问题的方法
  10. python 节气_Python开源日志01:pyGregorian2LunarCalendar公历农历转换、阳历阴历转换、二十四节气计算...
  11. AndroidStudio haxm installer win10安装失败问题建议
  12. 人工智能产品普及的今天,软件测试人员也在自我进化
  13. 【python PDF解析】python 读取PDF文件内容
  14. 计算机一级试题怎么保存上网,计算机一级试题中上网部分怎么保存文件
  15. app小程序手机端Python爬虫实战14-mitmproxy抓包软件详解
  16. 【鬼畜】UVA - 401每日一题·猛男就是要暴力打表
  17. 全球与中国混合二甲苯市场深度研究分析报告
  18. 了解一下,Android 10中的APEX
  19. Excel如何删除混乱符号
  20. 【技法操作】PS制作定位图标,UI设计教程

热门文章

  1. 中英文对照 —— 标点符号(punctuation)
  2. 自由度(degree of freedom)
  3. 【笔试/面试】数组及其内存结构
  4. CentOS hadoop 分布式集群的搭建
  5. vsan Linux 网络磁盘,理解vSAN中的磁盘空间占用
  6. 三层架构学习的困难_TCP/IP协议栈-之-三层交换技术
  7. seo代码优化工具_谁是「南京SEO」搜索引擎网站关键词排名优化专家
  8. python就业方向-目前Python这么火,Python有哪些就业方向?
  9. python读音有道-Python版有道翻译
  10. python入门基础教程-Python入门基础教程:WSGI