【题目大意】

给出一个长度为n的序列和m组查询(i,j,k),输出[i,j]中的第k大数。

【思路】

先离散化然后莫队分块。用树状数组来维护当前每个值的个数,然后对于每次询问二分答案即可。

又一次实力写错二分…(生无可恋脸.jpg)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=+;
const int MAXM=+;
struct node
{
int l,r,k,pos,id,ans;
}q[MAXM];
bool cmp(node x,node y)
{
return (x.pos==y.pos)?x.r<y.r:x.pos<y.pos;
}
bool cmpid(node x,node y)
{
return (x.id<y.id);
}
struct discretize
{
int num,pos;
bool operator < (const discretize &x) const {return (num<x.num);}
}tmp[MAXN];
int n,m;
int a[MAXN],e[MAXN];
int ori[MAXN];//离散化后的i对应的原数字为ori[i] int lowbit(int x)
{
return (x&(-x));
} void modify(int p,int x)
{
while (p<=n)
{
e[p]+=x;
p+=lowbit(p);
}
} int sum(int p)
{
int ret=;
while (p>)
{
ret+=e[p];
p-=lowbit(p);
}
return ret;
} void init()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&tmp[i].num);
tmp[i].pos=i;
}
sort(tmp+,tmp+n+);
for (int i=,j=;i<=n;i++)
{
if (i== || tmp[i].num!=tmp[i-].num) ++j,ori[j]=tmp[i].num;
a[tmp[i].pos]=j;
}
int block=(int)sqrt(n);
for (int i=;i<=m;i++)
{
scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].k);
q[i].id=i;
q[i].pos=(q[i].l-)/block+;
}
sort(q+,q+m+,cmp);
} int binary_search(int k)
{
int lb=,ub=n;
while (ub-lb>)
{
int mid=(ub+lb)>>;
if (sum(mid)>=k) ub=mid;else lb=mid;//注意一下二分怎么写
}
return ub;
} void solve()
{
int l=,r=;
memset(e,,sizeof(e));
for (int i=;i<=m;i++)
{
while (l<q[i].l) modify(a[l],-),l++;
while (l>q[i].l) l--,modify(a[l],);
while (r<q[i].r) r++,modify(a[r],);
while (r>q[i].r) modify(a[r],-),r--;
q[i].ans=binary_search(q[i].k);
}
sort(q,q+m+,cmpid);
for (int i=;i<=m;i++) printf("%d\n",ori[q[i].ans]);
} int main()
{
init();
solve();
return ;
}

【序列莫队+二分答案+树状数组】POJ2104-K-th Number的更多相关文章

  1. [CSP-S模拟测试]:序列(二分答案+树状数组)

    题目传送门(内部题98) 输入格式 第一行一个整数$n$,第二行$n$个整数$a_1\sim a_n$,第三行$n$个整数$b_1\sim b_n$. 输出格式 一行一个整数表示$\max(r-l+1 ...

  2. AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为 ...

  3. CodeForces - 220B Little Elephant and Array (莫队+离散化 / 离线树状数组)

    题意:N个数,M个查询,求[Li,Ri]区间内出现次数等于其数值大小的数的个数. 分析:用莫队处理离线问题是一种解决方案.但ai的范围可达到1e9,所以需要离散化预处理.每次区间向外扩的更新的过程中, ...

  4. CodeForces - 375D Tree and Queries (莫队+dfs序+树状数组)

    You have a rooted tree consisting of n vertices. Each vertex of the tree has some color. We will ass ...

  5. cf1073D Berland Fair (二分答案+树状数组)

    用一个树状数组维护前缀和,每次我二分地找一个位置,使得我能一路买过去 但这个买不了 那以后肯定也都买不了了,就把它改成0,再从头二分地找下一个位置,直到这一圈我可以跑下来 然后就看跑这一圈要花多少钱. ...

  6. 4418: [Shoi2013]扇形面积并|二分答案|树状数组

    为何感觉SHOI的题好水. ..又是一道SB题 从左到右枚举每个区间,遇到一个扇形的左区间就+1.遇到右区间就-1,然后再树状数组上2分答案,还是不会码log的.. SHOI2013似乎另一道题发牌也 ...

  7. luogu2336 喵星球上的点名 (SA+二分答案+树状数组)

    离散化一下然后把姓名串和询问串都放一起做SA 和bzoj3277串类似地,满足某一询问的后缀(就是和这个询问对应的后缀的LCP>=这个询问长度的后缀)的排名也是一个区间,把这个区间二分出来即可 ...

  8. 【BZOJ4009】[HNOI2015]接水果 DFS序+整体二分+扫描线+树状数组

    [BZOJ4009][HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, ...

  9. BZOJ 4009: [HNOI2015]接水果 (整体二分+扫描线 树状数组)

    整体二分+扫描线 树状数组 具体做法看这里a CODE #include <cctype> #include <cstdio> #include <cstring> ...

随机推荐

  1. javascript语言中的一等公民-函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  2. Android 聊天软件客户端

    1.代码架构图 2.qq.model层 3.qq.app层 4.qq.Constatnt层 5.qq.util层 6.qq.broadcast层 7.qq.control层 8.qq.view层 9. ...

  3. 安全测试===burpsuit指南

    网址: https://www.gitbook.com/book/t0data/burpsuite/details 引子 刚接触web安全的时候,非常想找到一款集成型的渗透测试工具,找来找去,最终选择 ...

  4. 终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误

    终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误 http://blog.csdn.net ...

  5. 访问WEB-INF目录中的文件

    WEB-INF下面的文件具有安全性,直接在浏览器中输入地址是访问不到的,可以通过servlet来访问. 方法1: 利用<jsp-file>/WEB-INF/a.jsp</jsp-fi ...

  6. PHP获取ip与ip所在城市

    1获取真实ip,本地测试总是::1 或者127.0.0.1 或者局域网的ip /** * 获取用户真实 IP */ function getIP() { static $realip; if (iss ...

  7. 【JBPM4】流程部署

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); RepositoryService repositorySe ...

  8. 排序算法总结(C语言版)

    排序算法总结(C语言版) 1.    插入排序 1.1     直接插入排序 1.2     Shell排序 2.    交换排序 2.1     冒泡排序 2.2     快速排序 3.    选择 ...

  9. 跨域请求方式之Jsonp形式

    在浏览器端才有跨域安全限制一说,而在服务器端是没有跨域安全限制的. 在两个异构系统(开发语言不同)之间达到资源共享就需要发起一个跨域请求. 而浏览器的同源策略却限制了从一个源头的文档资源或脚本资源与来 ...

  10. NBUT 1220 SPY

    $map$,简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<algorit ...