pku2104
传送门: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的更多相关文章
随机推荐
- SORT函数的使用方法(转载)
sort函数的用法(转载出处:http://blog.sina.com.cn/s/blog_6439f26f01012xw3.html) 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写 ...
- 在程序中用new ClassPathXmlApplicationContext()的注意事项
http://blog.csdn.net/budapest/article/details/38493003
- mysql建表: 主键,外键约束
CREATE DATABASE db_studentinfo; USE db_studentinfo ; DROP TABLE IF EXISTS t_student ; CREATE TABLE t ...
- zf-关于分页的行数如何配置
公司的项目分页显示行数是在web.xml里配置的 对应的java 文件是 BaseAction 这个文件里面写的就是分页的代码
- android中设置ListView的选中的Item的背景颜色
ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...
- ios复制到剪贴板
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconn
使用MySQL执行update的时候报错: MySQL 在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常. 异常内容: ...
- c# 添加了按钮双击事件后,再删除掉代码会提示错误
有两种方法:.清空属性窗口中的双击事件(doubleclick )右边的内容: .单击“发生错误”提示窗口的“否”后,再双击错误列表里的错误项,此时编辑窗口跳转为xx.Designer.cs,然后注释 ...
- 手把手教你使用startuml画用例图
转自:http://www.2cto.com/os/201502/377091.html 最近准备研究下volley的源码,但看了网上一些大牛的博客都是配合图这样看起来更直观,分析起来逻辑也很好,什么 ...
- (Question)CSS中position的绝对定位问题
RT,绝对定位相对于定位的元素存在是哪里? https://yunpan.cn/crjSMTiak2srZ 访问密码 1570