HDU6278 Just h-index
主席树+二分
每次对给定区间从1~区间长度len二分mid,查询区间内第mid大的数是不是大于等于mid。。
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define full(a, b) memset(a, b, sizeof a)
using namespace std;
typedef long long ll;
inline int lowbit(int x){ return x & (-x); }
inline int read(){
int X = 0, w = 0; char ch = 0;
while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }
while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
return w ? -X : X;
}
inline int gcd(int a, int b){ return a % b ? gcd(b, a % b) : b; }
inline int lcm(int a, int b){ return a / gcd(a, b) * b; }
template<typename T>
inline T max(T x, T y, T z){ return max(max(x, y), z); }
template<typename T>
inline T min(T x, T y, T z){ return min(min(x, y), z); }
template<typename A, typename B, typename C>
inline A fpow(A x, B p, C lyd){
A ans = 1;
for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd;
return ans;
}
const int N = 200005;
int n, q, tot, tree[20*N], lc[20*N], rc[20*N], a[N], b[N], root[N];
int buildTree(int l, int r){
int cur = ++tot;
if(l == r) return tot;
int mid = (l + r) >> 1;
lc[cur] = buildTree(l, mid);
rc[cur] = buildTree(mid + 1, r);
return cur;
}
int modify(int rt, int l, int r, int p){
int cur = ++tot;
tree[cur] = tree[rt] + 1, lc[cur] = lc[rt], rc[cur] = rc[rt];
if(l == r) return cur;
int mid = (l + r) >> 1;
if(p <= mid) lc[cur] = modify(lc[cur], l, mid, p);
else rc[cur] = modify(rc[cur], mid + 1, r, p);
return cur;
}
int query(int a, int b, int l, int r, int k){
int p = tree[lc[a]] - tree[lc[b]];
if(l == r) return l;
int mid = (l + r) >> 1;
if(k <= p) return query(lc[a], lc[b], l, mid, k);
return query(rc[a], rc[b], mid + 1, r, k - p);
}
int main(){
while(~scanf("%d%d", &n, &q)){
full(a, 0), full(b, 0), full(tree, 0), full(lc, 0), full(rc, 0), full(root, 0);
for(int i = 1; i <= n; i++) b[i] = a[i] = read();
sort(b + 1, b + n + 1);
int k = unique(b + 1, b + n + 1) - b - 1;
root[0] = buildTree(1, k);
for(int i = 1; i <= n; i++){
int p = lower_bound(b + 1, b + k + 1, a[i]) - b;
root[i] = modify(root[i - 1], 1, k, p);
}
while(q --){
int u = read(), v = read();
int l = 1, r = v - u + 1, len = v - u + 1;
while(l < r){
int mid = (l + r + 1) >> 1;
int tmp = b[query(root[v], root[u - 1], 1, k, len - mid + 1)];
if(tmp < mid) r = mid - 1;
else l = mid;
}
printf("%d\n", l);
}
}
return 0;
}
HDU6278 Just h-index的更多相关文章
- 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 ...
- jQuery—一些常见方法(1)【filter(),not(),has(),next(),prev(),find(),eq(),index(),attr(),】
1.filter()和not()方法 filter()和not()是一对反方法,filter()是过滤. filter()方法是针对元素自身.(跟has()方法有区别) <script type ...
- FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- [LeetCode] 274. H-Index H指数
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
- jquery基本操作笔记
来源于:http://www.cnblogs.com/webcome/p/5484005.html jq和js 可以共存,不能混用: 1 2 3 4 5 6 $('.box').css('backgr ...
- layer——源码学习
一.根据源码的学习 发现创建弹窗:使用了一些div来组成 zindex 和 index 是自动生成. zindex 表示生成的层次关系 index 用来表示各个层的id 默认class名 h = [& ...
- 多功能弹窗控件layer
开发网站的时候,如何合理运用好各种插件对开发的帮助是很大的. 免去了我们调试各种交互效果, 比如常用的弹窗.气泡.提示.加载.焦点.标签.导航.折叠等等 这里会推荐几个常用的js插件,丰富多样简单易移 ...
- 面试题:给定数组a,找到最大的j-i, 使a[j]>a[i]
第一种方法: 用两重循环对每对点都试一下,然后取最大值即可,时间复杂度为O(n2) #include <iostream> #include <algorithm> using ...
- web图片识别
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
随机推荐
- 【Dojo 1.x】笔记3 等待DOM加载完成
有的web页面总是得等DOM加载完成才能继续执行功能,例如,待页面DOM加载完成后,才能在DIV上进行渲染图形. Dojo提供了这个功能的模块,叫domReady,但是由于它很特殊,就在结尾加了个叹号 ...
- Apex 中 PageReference 的使用
PageReference类的作用 PageReference类位于Apex的System命名空间下.它可以用来在Apex代码中将页面跳转到指定的位置.在开发的时候,我们也可以向其中添加任意的参数. ...
- Paint.FontMetrics
要了解TextView对文本的绘制,那么就需要了解Paint.FontMetircs. 官方对该类的解释是:Class that describes the various metrics for a ...
- django源码分析 python manage.py runserver
django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...
- 搭建一个dubbo+zookeeper平台
本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...
- 【原】Java学习笔记002 - JAVA SE编码规范
/* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...
- java8 快速实现List转map 、分组、过滤等操作
利用java8新特性,可以用简洁高效的代码来实现一些数据处理. 定义1个Apple对象: public class Apple { private Integer id; private String ...
- Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(一)
接着上一篇,现在明确问题:在汇编克隆搜索文献中,有四种类型的克隆[15][16][17]:Type1.literally identical(字面相同):Type2.syntactically equ ...
- LeetCode算法题-Two Sum IV - Input is a BST(Java实现)
这是悦乐书的第280次更新,第296篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第148题(顺位题号是653).给定二进制搜索树和目标数,如果BST中存在两个元素,使得 ...
- 简单理解Java的反射
反射(reflect): JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功 ...