传送门:http://poj.org/problem?id=2104

题目大意:给定一个长度为N的数组{A[i]},你的任务是解决Q个询问。每次询问在A[l], A[l+1], ...... , A[r]的子区间(
     下标从1开始)内,第K大的数是多少。这里的第K大数可以理解为,将给定子数组拿出来按升序排序,其中排在第K
     个的数。注意询问操作并不更改原数组。

题解:水题,主席树回顾-----------

代码:

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define maxn 100005
using namespace std;
int a[maxn],list[maxn];
int root[maxn],ls[maxn*],rs[maxn*],sum[maxn*];
int n,m,sz;
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
if (bo) return -x; return x;
}
void ins(int l,int r,int x,int &y,int val)
{
y=++sz; sum[y]=sum[x]+;
if (l==r) return;
ls[y]=ls[x]; rs[y]=rs[x];
int mid=(l+r)>>;
if (val<=mid) ins(l,mid,ls[x],ls[y],val);
else ins(mid+,r,rs[x],rs[y],val);
}
void init()
{
n=read(); m=read();
for (int i=; i<=n; i++) list[i]=a[i]=read();
sort(list+,list++n);
for (int i=; i<=n; i++) a[i]=lower_bound(list+,list++n,a[i])-list;
for (int i=; i<=n; i++) ins(,n,root[i-],root[i],a[i]);
}
int query(int L,int R,int k)
{
int l=,r=n,x=root[L-],y=root[R];
while (l!=r)
{
int tmp=sum[ls[y]]-sum[ls[x]];
int mid=(l+r)>>;
if (k<=tmp)
{
r=mid,x=ls[x],y=ls[y];
}
else
{
l=mid+,k-=tmp,x=rs[x],y=rs[y];
}
}
return l;
}
void solve()
{
for (int i=; i<=m; i++)
{
int l=read(),r=read(),k=read();
int ans=query(l,r,k);
printf("%d\n",list[ans]);
}
}
int main()
{
init();
solve();
}

pku2104的更多相关文章

随机推荐

  1. HDU 3966 Aragorn's Story 动态树 树链剖分

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. asp.net MVC 3多语言方案--再次写, 配源码

    之前写了一篇asp.net MVC多语言方案,那次其实是为American Express银行开发的.有许多都是刚开始接触,对其也不太熟悉.现在再回过头去看,自己做一个小网站,完全用asp.net m ...

  3. java字符编码,字符转码

    编码:String->byte[]; str.getBytes(charsetName) 解码:byte[]->String; new String(byte[],charsetName) ...

  4. java网络之udp

    import java.net.*; /** * InetAddress用法 * 获取本地主机名,ip * 通过主机名,ip获取InetAddress对象 */ public class Demo{ ...

  5. ural1067 Disk Tree

    Disk Tree Time limit: 2.0 secondMemory limit: 64 MB Hacker Bill has accidentally lost all the inform ...

  6. dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect

    信息如下: 不知道为撒出现这个问题,查资料也木有查到..看提示信息可能是UIKit的问题,所以就试着这样解决,结果居然好了....有谁知道原因的告诉额一声啊,拜托!

  7. 8数码,欺我太甚!<bfs+康拓展开>

    不多述,直接上代码,至于康拓展开,以前的文章里有 #include<iostream> #include<cstdio> #include<queue> using ...

  8. mysql优化---优化sql

    一.通过show status和应用特点了解各种SQL的执行频率 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得.SHOW S ...

  9. linux command ---1

    查看Linux的内核版本 当前系统的发行版信息(distribution):lsb_release -a , lsb(linux standard Base) and distribution inf ...

  10. Varnish Cache

    1 Varnish简介 Varnish是高性能且开源的反向代理服务器和HTTP加速器(cache server).其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一.Varn ...