学到新思路了:求解 \(k\) 大值时,可以将所有元素放一块一起跑。


考虑到 \(n,q\) 奇小无匹,我们便可以制造一个 \(O(qn\log V)\) 的代码。

那么对于我们不想在时间复杂度中出现的 \(m\),我们直接把他扔进可持久化 \(Trie\) 中销赃。

再根据刚才那个思路,将 \([u,d]\) 中所有点扔进可持久化 \(Trie\) 里递归。

时间复杂度 \(O((m+qn)\log V)\)。

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
const int M=1e7+5,K=1005;
int n,m,a[K],nx[K],ny[K],tot;
int q,rt[N],ch[M][2],val[M];
void add(int &x,int y,int v,int id){
if(!x) x=++tot;
val[x]=val[y]+1;
if(id<0) return;
int c=((v>>id)&1);
ch[x][c^1]=ch[y][c^1];
add(ch[x][c],ch[y][c],v,id-1);
}int super_ans(int l,int r,int id,int k){
if(id<0) return 0;int num=0;
for(int i=l;i<=r;i++){
int c=1-((a[i]>>id)&1);
num+=val[ch[nx[i]][c]]-val[ch[ny[i]][c]];
}for(int i=l;i<=r;i++){
int c=((a[i]>>id)&1)^(num>=k);
nx[i]=ch[nx[i]][c],ny[i]=ch[ny[i]][c];
}return super_ans(l,r,id-1,k-(num<k)*num)+((num>=k)<<id);
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1,x;i<=m;i++)
cin>>x,add(rt[i],rt[i-1],x,30);
cin>>q;
while(q--){
int u,d,l,r,k;cin>>u>>d>>l>>r>>k;
for(int i=u;i<=d;i++)
ny[i]=rt[l-1],nx[i]=rt[r];
cout<<super_ans(u,d,30,k)<<"\n";
}return 0;
}

[THUSC2015] 异或运算 题解的更多相关文章

  1. [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...

  2. leetcode 268 Missing Number(异或运算的应用)

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  3. 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.

    本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器 ...

  4. C、C++、Java异或运算交换变量变量值的区别

    今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都 ...

  5. HDOJ 1287 破译密码(异或运算)

    Problem Description 有个叫"猪头帮"的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符:现在还知道他们加密的方法是:只用一个大写字 ...

  6. hdu2095 像水题的不错题 异或运算

    异或运算的基础有点忘记了 先介绍一下..2个数异或 就是对于每一个二进制位进行位运算 具有2个特殊的性质 1.一个数异或本身恒等于0,如5^5恒等于0: 2.一个数异或0恒等于本身,如5^0恒等于5. ...

  7. bis和bic命令实现或和异或运算

    从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...

  8. 二进制按位与(&) 按位或(|)  异或运算(^)

    1.参加运算的两个数据,按照二进制进行按位与的运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位同时为“1”,结果才为 ...

  9. 基于c#的windows基础设计(学习日记1)【关于异或运算】

    第一次接触异或运算,总体来说比哈希算法简单的多,无论是理解还是代码的难易度,唯一不好的是在固定了密钥之后,随机性就小了很多,所以安全性比起哈希算法还是有所差距. 原理在网站上很多都有所以就不再赘述了. ...

  10. MATLAB:图像的与、或、非、异或逻辑运算(&、|、~、xor)

    图像的与.或.非.异或逻辑运算涉及到了&.|.~和xor符号 close all;%关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc; clear all; I=imrea ...

随机推荐

  1. uni-app 横竖屏问题

    前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app 坑位 最近有用户反馈闪屏页也叫 ...

  2. 【Amadeus原创】k8s添加新master或node

    Master 1,在master上生成新的token [root@it-1c2d ]# kubeadm token create --print-join-command kubeadm join k ...

  3. Linux FTP 服务搭建

    Linux FTP 服务搭建 1.安装vsftp 1.1.使用yum进行安装vsftp [root@localhost ~]# yum -y install vsftpd 1.2.配置文件目录 [ro ...

  4. Anaconda下载安装及Spyder使用Python

    第一:选择编程语言, C++ Java Python等,量化交易广泛使用Python开发策略. 第二:选择软件,Anaconda 或者 PyCharm,龙哥选用Anaconda,因为 Anaconda ...

  5. Qt编写地图综合应用49-地图类型(街道图、卫星图)

    一.前言 地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内 ...

  6. IM跨平台技术学习(六):网易云信基于Electron的IM消息全文检索技术实践

    本文作者网易云信高级前端开发工程师李宁,本文有修订. 1.引言 在IM客户端的使用场景中,基于本地数据的全文检索功能扮演着重要的角色,最常用的比如:查找聊天记录.联系人等. 类似于IM中的聊天记录查找 ...

  7. FormData接口调用

    JAVA调用方式 JAVA原生实现 package com.hisense.demo.utils; import java.io.*; import java.net.HttpURLConnectio ...

  8. 按部就班--从零开始建设k8s监控(二)

    前言 书接上文,prometheus已经安装好了,并且能够对k8s的整体状态进行监控,但是我们还需要更多 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS docker 24.0. ...

  9. Solution Set - “盛开无法定格的花”

    目录 0.「ARC 160D」Mahjong 1.「BJOI 2017」「洛谷 P3715」魔法咒语 2.「清华集训 2017」「洛谷 P4227」我的生命已如风中残烛 3.「集训队互测 2018」「 ...

  10. uwp 下载文件显示进度并解压文件

    uwp 下载文件显示进度并解压文件. <Page x:Class="App4.MainPage" xmlns="http://schemas.microsoft.c ...