首先 \(k\) 大容易让我们想到 主席树&树套树&整体二分,而异或又让我们想到 01-Trie。

所以就有一个很明显的二分,二分一个 mid 看有多少个数不大于 mid。

然后发现 \(n\) 只有 \(1000\),所以可以暴力枚举第一维度,然后对 \(y\) 建 01-Trie,在 01-Trie 上查询即可,复杂度 \(O(nq\log^2V)\)。然而复杂度太高过不去

然而我们发现这个过程和主席树查找 \(k\) 大有点儿像。可是有多棵树啊?

学过 树状数组套权值树 的同学应该知道把根全部存起来,然后二分下去,树套树原本的三只 \(\log\) 就变成了 \(\log^2\)。

所以我们在这里也可以将 \(O(n)\) 个根存起来向下二分,感觉有点儿像树套树,又有点儿像整体二分。

最终的复杂度是 \(O(nq\log V)\) 的。

#include<cstdio>
const int M=3e5+5,INF=0x7fffffff;
int n,m,Q,tot,x[1005],y[M],root[M];
int q[1005],p[1005];
struct Node{
int sum,chi[2];
}t[M*35];
int Modify(int u,int x,int d=30){
int o=x>>d&1,id=++tot;
t[id]=t[u];++t[id].sum;
if(~d)t[id].chi[o]=Modify(t[u].chi[o],x,d-1);
return id;
}
int Query(int k,int l,int r,int L=0,int R=INF,int d=30){
if(L==R)return L;
register int i,o,sum=0,mid=(long long)L+R>>1;
for(i=l;i<=r;++i)o=x[i]>>d&1,sum+=t[t[p[i]].chi[o]].sum-t[t[q[i]].chi[o]].sum;
if(k<=sum){
for(i=l;i<=r;++i)o=x[i]>>d&1,p[i]=t[p[i]].chi[o^0],q[i]=t[q[i]].chi[o^0];
return Query(k,l,r,L,mid,d-1);
}
else{
for(i=l;i<=r;++i)o=x[i]>>d&1,p[i]=t[p[i]].chi[o^1],q[i]=t[q[i]].chi[o^1];
return Query(k-sum,l,r,mid+1,R,d-1);
}
}
signed main(){
register int i,j,k,L,R,ql,qr;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)scanf("%d",x+i);
for(i=1;i<=m;++i)scanf("%d",&k),root[i]=Modify(root[i-1],k);
scanf("%d",&Q);
for(i=1;i<=Q;++i){
scanf("%d%d%d%d%d",&L,&R,&ql,&qr,&k);
for(j=L;j<=R;++j)q[j]=root[ql-1],p[j]=root[qr];
printf("%d\n",Query((R-L+1)*(qr-ql+1)-k+1,L,R));
}
}

LGP5795题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. ubuntu vi 使用

    转载请注明来源:https://www.cnblogs.com/hookjc/ 文书编辑器介绍 [VI] vi ( m ) 在大多数的 unix 系统中 ( 包括 linux ) 都内建 vi ( m ...

  2. nginx实现跨域访问并支持(GET, POST,PUT,DELETE, OPTIONS)

    最近有同事提出在使用客户端跨域访问的时候,发现服务器对option请求返回了403,后来查看了网络添加了一段配置,发现option服务返回204了,但是后续的put操作也直接返回了204导致无法使用图 ...

  3. python日志装饰器实现

    问题出自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143184355 ...

  4. Linux Shell中的数组及遍历 转

    转自:http://www.linuxidc.com/Linux/2011-09/42929.htm 在Linux下使用shell的时候,为方便起见,偶尔会用到一下数组.数组的申明方式是: array ...

  5. 关于tx:method和pointcut中的方法,即事务管理中的方法和切入点表达式中的方法具体如何执行

    <tx:advice id="transaction" tranction-manager="transactionManager"> <tx ...

  6. Docker Harbor私有仓库部署与管理 (超详细配图)

    Docker Harbor私有仓库部署与管理 1.Harbor 介绍 2.Harbor部署 3.Harbor管理 1.Harbor 介绍: 什么是 Harbor ? Harbor 是 VMware 公 ...

  7. Docker-Compose 容器集群的编排

    Docker-Compose 容器集群的编排 1.Docker-Compose 概述 2.Docker Compose 环境安装 Docker-Compose功能:  可以实现单机上的容器集群编排 1 ...

  8. shell——wait与多进程并发

    在脚本里用&后台打开多个子进程,用wait命令可以使这些子进程并行执行. 例1: fun1(){ while true do echo 1 sleep 1 done } fun2(){ whi ...

  9. 015 Linux 标准输入输出、重定向、管道和后台启动进程命令

    目录 1 三种标准输入输出 2 什么是重定向?如何重定向? (1)什么是重定向? (2)如何重定向? 3 管道符以及和它容易混淆的一些符号使用 (1)管道符 | (2)&和&& ...

  10. 使用VMware安装win10虚拟机

    (1)打开VMware: (2)打开左上角的文件,点击新建虚拟机: (3)选择典型,下一步: (4)选择稍后安装操作系统,下一步: (5)选择win10×64,下一步: (6)可随意修改虚拟机名称,位 ...