主席树+二分

每次对给定区间从1~区间长度len二分mid,查询区间内第mid大的数是不是大于等于mid。。

  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3. #define full(a, b) memset(a, b, sizeof a)
  4. using namespace std;
  5. typedef long long ll;
  6. inline int lowbit(int x){ return x & (-x); }
  7. inline int read(){
  8. int X = 0, w = 0; char ch = 0;
  9. while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }
  10. while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
  11. return w ? -X : X;
  12. }
  13. inline int gcd(int a, int b){ return a % b ? gcd(b, a % b) : b; }
  14. inline int lcm(int a, int b){ return a / gcd(a, b) * b; }
  15. template<typename T>
  16. inline T max(T x, T y, T z){ return max(max(x, y), z); }
  17. template<typename T>
  18. inline T min(T x, T y, T z){ return min(min(x, y), z); }
  19. template<typename A, typename B, typename C>
  20. inline A fpow(A x, B p, C lyd){
  21. A ans = 1;
  22. for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd;
  23. return ans;
  24. }
  25. const int N = 200005;
  26. int n, q, tot, tree[20*N], lc[20*N], rc[20*N], a[N], b[N], root[N];
  27. int buildTree(int l, int r){
  28. int cur = ++tot;
  29. if(l == r) return tot;
  30. int mid = (l + r) >> 1;
  31. lc[cur] = buildTree(l, mid);
  32. rc[cur] = buildTree(mid + 1, r);
  33. return cur;
  34. }
  35. int modify(int rt, int l, int r, int p){
  36. int cur = ++tot;
  37. tree[cur] = tree[rt] + 1, lc[cur] = lc[rt], rc[cur] = rc[rt];
  38. if(l == r) return cur;
  39. int mid = (l + r) >> 1;
  40. if(p <= mid) lc[cur] = modify(lc[cur], l, mid, p);
  41. else rc[cur] = modify(rc[cur], mid + 1, r, p);
  42. return cur;
  43. }
  44. int query(int a, int b, int l, int r, int k){
  45. int p = tree[lc[a]] - tree[lc[b]];
  46. if(l == r) return l;
  47. int mid = (l + r) >> 1;
  48. if(k <= p) return query(lc[a], lc[b], l, mid, k);
  49. return query(rc[a], rc[b], mid + 1, r, k - p);
  50. }
  51. int main(){
  52. while(~scanf("%d%d", &n, &q)){
  53. full(a, 0), full(b, 0), full(tree, 0), full(lc, 0), full(rc, 0), full(root, 0);
  54. for(int i = 1; i <= n; i++) b[i] = a[i] = read();
  55. sort(b + 1, b + n + 1);
  56. int k = unique(b + 1, b + n + 1) - b - 1;
  57. root[0] = buildTree(1, k);
  58. for(int i = 1; i <= n; i++){
  59. int p = lower_bound(b + 1, b + k + 1, a[i]) - b;
  60. root[i] = modify(root[i - 1], 1, k, p);
  61. }
  62. while(q --){
  63. int u = read(), v = read();
  64. int l = 1, r = v - u + 1, len = v - u + 1;
  65. while(l < r){
  66. int mid = (l + r + 1) >> 1;
  67. int tmp = b[query(root[v], root[u - 1], 1, k, len - mid + 1)];
  68. if(tmp < mid) r = mid - 1;
  69. else l = mid;
  70. }
  71. printf("%d\n", l);
  72. }
  73. }
  74. return 0;
  75. }

HDU6278 Just h-index的更多相关文章

  1. HDU-6278-Jsut$h$-index(主席树)

    链接: https://vjudge.net/problem/HDU-6278 题意: The h-index of an author is the largest h where he has a ...

  2. jQuery—一些常见方法(1)【filter(),not(),has(),next(),prev(),find(),eq(),index(),attr(),】

    1.filter()和not()方法 filter()和not()是一对反方法,filter()是过滤. filter()方法是针对元素自身.(跟has()方法有区别) <script type ...

  3. FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  4. [LeetCode] 274. H-Index H指数

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...

  5. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  6. jquery基本操作笔记

    来源于:http://www.cnblogs.com/webcome/p/5484005.html jq和js 可以共存,不能混用: 1 2 3 4 5 6 $('.box').css('backgr ...

  7. layer——源码学习

    一.根据源码的学习 发现创建弹窗:使用了一些div来组成 zindex 和 index 是自动生成. zindex 表示生成的层次关系 index 用来表示各个层的id 默认class名 h = [& ...

  8. 多功能弹窗控件layer

    开发网站的时候,如何合理运用好各种插件对开发的帮助是很大的. 免去了我们调试各种交互效果, 比如常用的弹窗.气泡.提示.加载.焦点.标签.导航.折叠等等 这里会推荐几个常用的js插件,丰富多样简单易移 ...

  9. 面试题:给定数组a,找到最大的j-i, 使a[j]>a[i]

    第一种方法: 用两重循环对每对点都试一下,然后取最大值即可,时间复杂度为O(n2) #include <iostream> #include <algorithm> using ...

  10. web图片识别

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

随机推荐

  1. html的标签分类————可以上传的数据篇

    html的标签可以分为: 块级标签:div(白板),H系列(加大加粗,H1—H7,字体一般逐渐变小,一般用作标题),p标签(段落之间有间距) 行内标签:span(白板) 此外,标签之间是可以嵌套的.为 ...

  2. 做了面向互联网部署的Dynamics 365 CE更改AD FS的登录页面

    摘要: 微软动态CRM专家罗勇 ,回复306或者20190307可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 默认情况下A ...

  3. 解决centos7.0安装mysql后出现access defind for user@'localhost'的错误

    在使用yum 安装完mariadb, mariadb-server, mariadb-devel后 1. rpm -qa | grep maria   查看maria相关库的是否在进程中 2. net ...

  4. Linux chmod命令用法

    chmod----改变一个或多个文件的存取模式(mode) Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : ...

  5. iOS 12.1 跳转页面时 tabBar闪动

    最新iOS 12.1系统,self.hidesBottomBarWhenPushed = YES,tabBar发生闪动 设置为不透明就行了.[[UITabBar appearance] setTran ...

  6. RH2288V3服务器 硬件安装以及更换硬件

    滑道类型:L型滑道.可伸缩滑道.报轨 L型滑道:只适用于华为机柜. 准备工具:防静电带或者防静电手套.螺丝刀.浮动螺母安装条. 安装服务器步骤: 1.安装L型滑道   2.安装浮动螺母  3.安装服务 ...

  7. PHAR系列之导言

    由于之前都是在现成的PHP框架下写web项目,一般都只专注于框架内部的使用跟优化.但是对于一些PHP很有特色的功能跟特性很少过多的深入了解.最近做项目调研的时候偶尔注意到一个PHP中一个比较常见的概念 ...

  8. 模块简介:(logging)(re)(subprocess)

    ''' logging模块: logging的日志可以分为 debug():Detailed information, typically of interest only when diagnosi ...

  9. 数据库【mysql篇】典型的一些练习题目

    班级表 class 学生表student 老师表 teacher 课程表course 成绩表 score 准备数据 创建数据库 create database tang_test charset='u ...

  10. CodeChef Dynamic GCD

    嘟嘟嘟vjudge 我今天解决了一个历史遗留问题! 题意:给一棵树,写一个东西,支持一下两种操作: 1.\(x\)到\(y\)的路径上的每一个点的权值加\(d\). 2.求\(x\)到\(y\)路径上 ...