poj 2104 主席树(区间第k大)

某音播放量查询,播放量接口研究,最新版本抓包,修改SO文件绕过SSL 本教程适用于某音27.8,64位版本,32为版本及某音旁侧版本修改方法大同小异,部分旁侧版本修改之后模拟器可能无法抓包,真机测试均可正常抓包,此方法修改后绝大部分包可以正常抓取,但部分包无法抓取,例如验证码,内置浏览器功能,如需抓取此类包可通过 Postern + Charles 实现。 阅读详情

K-th Number
Time Limit: 20000MS Memory Limit: 65536K
Total Submissions: 44940 Accepted: 14946
Case Time Limit: 2000MS

Description

You are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be able to return quickly k-th order statistics in the array segment. 
That is, given an array a[1...n] of different integer numbers, your program must answer a series of questions Q(i, j, k) in the form: "What would be the k-th number in a[i...j] segment, if this segment was sorted?" 
For example, consider the array a = (1, 5, 2, 6, 3, 7, 4). Let the question be Q(2, 5, 3). The segment a[2...5] is (5, 2, 6, 3). If we sort this segment, we get (2, 3, 5, 6), the third number is 5, and therefore the answer to the question is 5.

Input

The first line of the input file contains n --- the size of the array, and m --- the number of questions to answer (1 <= n <= 100 000, 1 <= m <= 5 000). 
The second line contains n different integer numbers not exceeding 109 by their absolute values --- the array for which the answers should be given. 
The following m lines contain question descriptions, each description consists of three numbers: i, j, and k (1 <= i <= j <= n, 1 <= k <= j - i + 1) and represents the question Q(i, j, k).

Output

For each question output the answer to it --- the k-th number in sorted a[i...j] segment.

Sample Input

7 3
1 5 2 6 3 7 4
2 5 3
4 4 1
1 7 3

Sample Output

5
6
3

因为保存的是前i个数的情况,求[a,b]区间时,只需要T[b]-T[a-1]


/*
poj2104
主席树-求解区间第k大
hhh-2016-02-18 13:09:24
*/

#include <functional>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
typedef long double ld;

using namespace std;
const int maxn = 100010;
int tot;
int n,m;
int a[maxn],t[maxn];
int T[maxn],lson[maxn*30],rson[maxn*30],c[maxn*30];

int build(int l,int r)
{
    int root = tot++;
    if(l != r)
    {
        int mid = (l+r)>>1;
        lson[root] = build(l,mid);
        rson[root] = build(mid+1,r);
    }
    return root;
}

void ini_hash()  //排序去重
{
    for(int i = 1;i <= n;i++)
        t[i] = a[i];
    sort(t+1,t+n+1);
    m = unique(t+1,t+n+1)-(t+1);
}

int Hash(int x) //得到位置
{
    return lower_bound(t+1,t+m+1,x)-t;
}

//如果那里发生改变则新建一个节点而非像平常修改那个节点的值
int update(int root,int pos,int val)
{
    int newroot = tot++;
    int tmp = newroot;
    c[newroot] = c[root] + val;
    int l = 1,r = m;
    while(l < r)
    {
        int mid = (l+r)>>1;
        if(pos <= mid)
        {
            lson[newroot] = tot++;rson[newroot] = rson[root];
            newroot = lson[newroot]; root = lson[root];
            r = mid;
        }
        else
        {
            lson[newroot] = lson[root]; rson[newroot] = tot++;
            newroot = rson[newroot]; root = rson[root];
            l = mid+1;
        }
        c[newroot] = c[root] + val;
    }
    return tmp;
}

int query(int lt,int rt,int k)
{
    int l = 1, r = m;
    while(l < r)
    {
         int mid = (l+r)>>1;
         if(c[lson[rt]] - c[lson[lt]] >= k)
         {
             r = mid;
             lt = lson[lt];
             rt = lson[rt];
         }
         else
         {
             l = mid+1;
             k -= (c[lson[rt]] - c[lson[lt]]);
             lt = rson[lt];
             rt = rson[rt];
         }
    }
    return l;
}

int main()
{
    int q;
    while(scanf("%d%d",&n,&q) !=EOF)
    {
        tot = 0;
        for(int i = 1;i <= n;i++)
            scanf("%d",&a[i]);
        ini_hash();
        T[0] = build(1,m);
        for(int i = 1;i <= n;i++)
        {
            int pos = Hash(a[i]);
            T[i] = update(T[i-1],pos,1);
        }
        while(q--)
        {
            int l,r,k;
            scanf("%d%d%d",&l,&r,&k);
            printf("%d\n",t[query(T[l-1],T[r],k)]);
        }
    }
    return 0;
}




013:无人机航线规划的概念 航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。 阅读详情

相关推荐

CMOS传输门实战:如何用模拟开关优化你的电路设计(附常见问题排查)

本文深入探讨了CMOS传输门在电路设计中的实战应用与优化策略。文章从核心参数选型入手,详细分析了导通电阻、电荷注入等关键特性对电路性能的影响,并提供了多路复用器构建、精密电路应用等实战架构。同时,重点分享了PCB布局、电源去耦的工程细节,以及开关不导通、信号失真、高频性能不足等常见问题的系统性排查指南,旨在帮助硬件工程师充分发挥CMOS模拟开关的效能,提升电路设计的可靠性与精度。

js777的博客 450

poj 2104 归并树

每次查找二分出某个数,logn时间在树中找到它的区间,二分找比它小的数的个数,三次二分= (log n)^3 解决的问题:查询某个区间内第k大的数 值得注意的是: 1.归并树,划分树都只能解决元素不重复的情况 2.多个x有相同rank的时候取最大的x 这些相同rank的数组成一个序列A1,A2,……An,之间两两不同,因为没有重复元素 若答案不是An而是Ai(1

Jackyguo1992的专栏 1029

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1816

hdu 5412 CRB and Queries(动态区间第k大值,区间能修改)(整体二分,树状数组套平衡树,线段树套treap)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5412 解题思路: 官方题解: In this problem, we can use BIT and Treap. We use BIT for coding skill and each element of BIT is Treap. First, for eac

piaocoder 2518

海豚调度器(dolphinscheduler)再次使用,添加钉钉预警

1,首先我们部署是海豚调度器 1.3.8版本,由于页面只有邮件预警,所以在了解源码的同时,需要添加钉钉预警 2,说明,这一块是同事搞的,不是我搞的,新版本的dolphinscheduler已经有了钉钉模块,只是新版本还没有发布 3,我们现在只是添加简单的钉钉预警,任务成功或者失败会发送邮件+钉钉 4,具体操作 找到最新的源码devhttps://github1s.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-alert/src/ma...

qq_31866793的博客 3083

Redhawk-SC输入件配置中的5个常见错误及解决方法

本文针对Redhawk-SC功耗与可靠性签核工具,深入剖析了输入件配置中工艺文件错配、DEF文件路径、时序文件格式、电源网络模型及宏模型处理这5个最常见且棘手的错误。文章提供了资深工程师验证过的实战解决方案与检查清单,旨在帮助用户规避风险,提升配置效率与分析准确性,确保芯片签核流程的顺利进行。

earth的博客 233

POJ2104(平方分割)

解题思路:以前使用主席树AC过一次的题目,现在用平方分割来试试。大致做法就是,把所有数放进MAXN大小的桶中。然后对各个桶中的数进行排序。处理时采用二分搜索的办法确定结果。即如果有1.。。n个数。则用二分来试这个数试mid是区间中第几小的数。关于平方分割处理的细节就是:把不完全包括在桶中部分用枚举的办法筛选,对于完全包括在区间内的桶,则用二分搜索。最后的复杂度为O(m*(logn)*(根号n*lo...

qq_39861441的博客 393

基于的公司考勤系统(程序+开题报告)(开题报告+源码)

我们将研究和设计系统的架构和功能模块,包括员工信息管理模块、部门信息管理模块、考勤信息记录模块、工资信息计算模块、请假信息处理模块、奖惩信息管理模块、公告信息发布模块、上班打卡模块以及加班申请模块等。目的: 本项目旨在设计并实现一个基于的公司考勤系统,通过该系统,可以实现对员工、部门信息、考勤信息、工资信息、请假信息、奖惩信息、公告信息、上班打卡、加班申请等功能的统一管理。基于的公司考勤系统的设计与实现,旨在通过自动化技术提高考勤管理的效率和准确性,为企业管理提供有力的数据支持。最终成品以下面运行环境。

迟限程序设计 997

poj2104 主席树

题目大意:给一串数字,多次询问区间的第k小值 思路:不带修改的主席树。第一次打主席树,所以还是参照了以下网上的模板。主席树的原理: 其实就是每添加一个数,就增加一棵树(其实是一条链),然后这条链上的计数值都+1,表示这个树链比之前的要多加了一个数。这样,想要比较第i个数与第j个数区间内,第k大的数就很好求了。只要比较s[i-1]和s[j]即可(即第i-1条树链,第j条树链),因为这两条树链的区...

qq_39861441的博客 242

Android 17为什么会重写MessageQueue

DeliQueue 通过消除 MessageQueue 中的锁,提升了系统和应用的性能。合成基准测试: 得益于并发能力的提升(Treiber 栈)和更快的插入速度(最小堆),向繁忙队列进行多线程插入的速度比传统 MessageQueue 快了高达 5000 倍。Perfetto 追踪分析: 在从内部测试人员处获取的 Perfetto 追踪记录中,我们看到应用主线程在锁竞争上消耗的时间减少了 15%。

xiangzhihong8的专栏 269

路径规划 | 图解A*、Dijkstra、GBFS算法的异同(附C++/Python/Matlab仿真)

图解A*、Dijkstra、GBFS算法原理,分析三种算法异同,提供C++/Python/Matlab仿真实现

FRIGIDWINTER的博客 2万+

poj2104 主席树(还是不太会)

这篇博客写的挺好的 推荐去看 https://blog.youkuaiyun.com/woshinannan741/article/details/53012682 Input The first line of the input file contains n — the size of the array, and m — the number of questions to answer (1 &lt...

h_666666的博客 280

【PHP面试题29】什么是PHP-FPM?它与PHP和Nginx有什么关系

PHP面试专区。计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。PHP-FPM(FastCGI Process Manager)是PHP的FastCGI进程管理器,它是PHP 5.3.3及更高版本的一部分。它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能,并且可以与Web服务器(如Nginx、Apache等)进行通信。PHP-FPM是PHP的FastCGI进程管理器,它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能。

黑夜开发者的博客 1476

poj 2104 区间第k大 主席树

/* 静态主席树求区间第K大 poj 2104 主要思想: 1. 将数据离散化 2. 用线段树来维护信息,维护处于该区间的数的个数 3. 将原有数组中的每一个数依次插入,每次插入一个值的时候新建一棵线段树 这样就有了n+1棵线段树,对于询问(l,r,k),只需查询T[l-1]和T[r]两棵线段树

legedexinshi的专栏 573

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

POJ 2104 区间第k大(主席树)

题目链接:http://poj.org/problem?id=2104 题目大意:给定还有n个数的序列,m个操作,每个操作含有l,r,k,求区间[l,r]第k大 解题思路:线段树只能维护序列的最大值最小值,考虑对于输入的序列的每一个前缀建立一颗线段树,即含有n颗线段树,这样肯定会爆内存。相邻两颗线段树其实有很多相同的,不同的大概就是 log n个节点,我们新开log n个节点就可以了。每个节点...

weixin_30387339的博客 99

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

POJ 2104 K-th Number 主席树 静态区间第K大

题目大意: 就是给出一个静态的序列然后多次询问问某一连续的数中的第k大的数是多少, k也会变化 大致思路: 主席树学习第一题... 这个函数式线段树的思路感觉好巧妙= = 对于给出的序列离散化之后对于离散化之后的值域建线段树, 对于序列的每一个前缀都建立线段树, 然后充分利用以前的版本, 使得空间复杂度降到O(nlogn)的级别 由于支持访问历史版本, 可以利用减法来得到需要的

Gatevin的专栏 1263

[poj 2104 K-th Number] 主席树 区间第K大

[poj 2104 K-th Number] 主席树 区间第K大题目链接:[poj 2104 K-th Number] 题意描述:给定NN个数a1,a2,…,ana_1,a_2,\ldots,a_n,MM次查询,每次查询区间第LL个数到第RR个数中的第KK大数。 相似题目: [hdu 4417 Super Mario] 主席树+离散化 解题思路:首先对数据离散化。然后线段树记录区间中的数字出

Fighting! 730

POJ 2104 区间第k大 主席树(模板)

题目 题意 查询区间范围内,第 kkk 大的数 思路 按照数列顺序依次加入,构建可持久化线段树(主席树),由于线段树的可减性,能够得到对应区间范围内的线段树 主席树的模板题了 代码 int cnt, root[maxn], a[maxn]; struct Node{ int l, r, sum; }T[maxn*40]; vector<int> v; int getid(i...

ShadowGhostH的博客 303

POJ 2104 K-th Number——————主席树模板,区间第k大

K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 77307 Accepted: 27874 Case Time Limit: 2000MS Description You are working for Macrohard company in data structures department....

鸿杰 的博客 298

【poj2104】不带修改的区间第k大 主席树

【题目大意】 给定一个长为N的序列,每个序列的权值为Ai.有M个询问,每个询问为(L,R,K),分别代表[L,R]的第K大的数。 期中n=100000,m=5000 【题解】 用主席树解决,那么什么是主席树呢? 首先我们先明确一下权值线段树的概念。 平常我们用的线段树都是区间线段树,而权值线段树和平衡树中树的结点意义是类似的。 权值线段树中(下文所说线段树均值权值线段树),每个结

chty_syq的博客 375

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

POJ 2104(K-th Number-区间第k大-主席树) !裸题 1.Hash后建树; 2.x-y区间最大—-》sum[y]-sum[x-1]后贪心去找; 3.建树时需1-i(n=>i>=1)的树, 【可持久化】—–》改rson 则lson等;#include<iostream> #include<stdio.h> #include<algorithm> using namespace

ATOD 1057

POJ 2104 K-th Number 静态区间第k大 主席树

数据结构 主席树 函数式 线段树 POJ 2104

oakszyjrnrdy 307

POJ-2104 区间第k大-主席树板子

原题地址 主席树是可持久化的线段树,每加入一个节点都建一棵线段树,但是不需要建立一棵完整的树,因为更新一个点只会影响log(n)个节点。不变的节点建立一个联系就可以。先来个经典题存个板子。以后再来填坑。。 #include<algorithm> #include<iostream> #include<cstdio> #include<vector> ...

xuxiaobo1234的博客 216

poj2104&&poj2761 静态区间查询第k大 主席树

主席树又叫

555

poj2104区间K大 主席树

题目poj2104DescriptionYou are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be

zmh的博客 459

poj2104 主席树区间第k大

主席树裸题,过了好久都快忘了。主席树主要就是使多个线段树并行于一颗树中,保存的是一段区间内数字出现的个数,所以先离散化。对整个序列构造一个线段树,然后在线段树上不断找第 k 小在当前数字区间的左半部分还是右半部分。(类似于平衡树)数字的更改只影响了一条从这个叶子节点到根的路径,所以只有这条路径是新的,其他的都没有改变。比如对于某个节点,要往右边走,那么左边那些就不用新建,只要用个指针链到原树的此节点

Magic_Sheep的博客 280

POJ2104 POJ2761 区间第K大 主席树

题意查询一个区间第k大的数解法之前只是套版,没仔细看模板里的代码很吃亏,重新仔细看了一遍,理解更深了一点。这道题里面建了N个线段树,第i个线段树维护后缀[i…n]中数字在大小为[L,R]的区间里面的个数,但是数字很大,离散化一下就好(用unique)精髓在查询里面,查询区间[L,R]里面第K大的数字,其实就是找到一个mid,使sum[1,mid] = k(在T[L]上查询的结果 - T[R+1]上查

czw's blog 739
上一篇: SPOJ DQUERY树状数组离线or主席树
下一篇: SPOJ COT(树上的点权第k大)
Tyuio28
博客等级 码龄11年 12粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值