LGP5795题解
首先 \(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题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- V8 内存管理和垃圾回收机制总结
这篇文章主要介绍 V8 的内存管理和垃圾回收知识. V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,Node 在操作大内存对象时受到了一些限制,在 64 位的机器上,默认最大操作的对象大小约 ...
- 为 ubuntu 切换更新源
感谢大佬:https://blog.csdn.net/sudaning/article/details/83445677 目录 备份 修改源文件 更新列表 更新软件 备份 sudo cp /etc/a ...
- Math 数学类
/* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...
- go基础——运算符
算数运算符 /* 算术运算符:+,-,*,/,%,++,-- */ a := 10 b := 3 sum := a + b //加减乘类似 fmt.Printf("%d + %d = %d\ ...
- uos系统离线状态下进入开发者模式
需到处机器信息,接着登入指定的uos开发者网站,下载证书,然后在机器上加载证书,重启即可.
- 敲出的第一个python程序
学习python第二天,终于照猫画虎编辑出第一个程序.程序要求如下: 1.输入用户名.密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 源代码如下: username = 'jackson'pas ...
- 1、Golang基础--Go简介、环境搭建、变量、常量与iota、函数与函数高级
1 Go语言介绍 1 golang-->Go--->谷歌公司 2009年 golang:指go语言,指的go的sdk goland:软件,ide:集成开发环境 Java写的 2 Go是静态 ...
- Note/Solution -「洛谷 P6466」分散层叠算法
\(\mathcal{Description}\) Link. 给定 \(m\) 个长度为 \(n\) 的有严格升序且不包含重复元素的序列 \(a_1,a_2,\cdots,a_m\),\(q ...
- nginx 配置ssl证书
1.443端口配置 server { listen 443 ssl; server_name www.test.com; ssl_certificate /usr/local/nginx/cert/t ...
- 人工智能进度好慢,呜呜呜 还是先来学python!!!!!!!二十三讲、二十四讲!
0:十转2 def my_bin(x): a ='' if x : a = my_bin(x//2) return a+str(x%2) else: a+='0b' return a print(my ...