区间k大,分块大法好,每个区间内存储一个有序表。

二分答案,统计在区间内小于二分到的答案的值的个数,在每个整块内二分、零散的暴力即可。

还是说∵有二分操作,∴每个块的大小定为sqrt(n*log2(n))比较快呢。

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,a[],num[],qx,qy,k,p,v,m,sz,sum,l[],r[],b[],tmp[];
char s[];
void makeblock()
{
memcpy(b,a,sizeof(a));
sz=sqrt((double)n*log2(n));
for(sum=;sum*sz<n;sum++)
{
l[sum]=(sum-)*sz+;
r[sum]=sum*sz;
for(int i=l[sum];i<=r[sum];i++)
num[i]=sum;
sort(b+l[sum],b+r[sum]+);
}
l[sum]=sz*(sum-)+;
r[sum]=n;
sort(b+l[sum],b+r[sum]+);
for(int i=l[sum];i<=r[sum];i++)
num[i]=sum;
}
void query(int L,int R,int k)
{
if(num[L]+>=num[R])
{
int en=;
for(int i=L;i<=R;i++) tmp[++en]=a[i];
sort(tmp+,tmp+en+);
printf("%d\n",tmp[k]);
}
else
{
int x=,y=;
while(x!=y)
{
int mid=x+y>>,cnt=;
for(int i=L;i<=r[num[L]];i++) if(a[i]<mid) cnt++;
for(int i=l[num[R]];i<=R;i++) if(a[i]<mid) cnt++; //统计<mid的值数
for(int i=num[L]+;i<num[R];i++) cnt+=( lower_bound(b+l[i],b+r[i]+,mid) - (b+l[i]) );
if(cnt>=k) y=mid;
else x=mid+;
}
printf("%d\n",x-);
}
}
void update(int p,int v)
{
*lower_bound(b+l[num[p]],b+r[num[p]]+,a[p])=v;
sort(b+l[num[p]],b+r[num[p]]+);
a[p]=v;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
makeblock();
for(int i=;i<=m;i++)
{
scanf("%s",s);
if(s[]=='Q') {scanf("%d%d%d",&qx,&qy,&k);query(qx,qy,k);}
else {scanf("%d%d",&p,&v);update(p,v);}
}
return ;
}

最新文章

  1. Spring(三)AOP面向切面编程
  2. h5视频上传之前端视频压缩研究
  3. Android 4.0 源代码结构
  4. 微信小程序(应用号)开发资源汇总整理 - 一直更新中
  5. objective-c 中随机数的用法 3种:arc4random() 、random()、CCRANDOM_0_1()
  6. Python实现PLA(感知机)
  7. A few things to remember while coding in Python.
  8. 快递查询API接口对接方法
  9. VS2005快捷键
  10. input submit button iOS webview browser diffrence
  11. JS 去除特定符号(逗号)的方法
  12. virtualbox 中安装win7虚拟机
  13. 4D(DRG、DLG、DOM、DEM)数据 概念
  14. (四)—性能测试工具curl-loader(linux)
  15. 基于Kubernetes 构建.NET Core 的技术体系
  16. java 文档
  17. jQuery事件--change([[data],fn])、on(events,[selector],[data],fn)和hover([over,]out)
  18. WebStrom配置SVN服务
  19. Hibernate学习笔记2.5(Hibernate核心开发接口和三种状态)
  20. 【bzoj3881】[Coci2015]Divljak AC自动机+树链的并+DFS序+树状数组

热门文章

  1. linux启动一个web项目时验证码不能出现的问题的解决
  2. 编译 openssl 0.9.8zc 出现 error C2220: warning treated as error - no &#39;object&#39; file generated
  3. Linux Uptime 命令,让你知道你的系统运行了多久
  4. UVa 12265 贩卖土地 单调栈
  5. QML与C++混合编程详解(转)
  6. js三层引号嵌套
  7. Jmeter接口测试常见的乱码问题三种解决方法
  8. React 踩坑记录
  9. Git-回滚操作
  10. python 复习 4-1 函数、参数、返回值、递归