51nod1295
题解:
考虑到是异或,那么就是位运算
位运算会想到什么?当然是按位拆开
那么就变成了一个个的字符串
考虑了trie
可是貌似有多个问题
那么就用可持久化trie!
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=,M=,L=;
int tot,n,q,son[M][],sum[M],root[N],bz[L+];
int read()
{
int x=;char c;
for (c=getchar();c<''||c>'';c=getchar());
for (;c>=''&&c<='';c=getchar())x=x*+c-;
return x;
}
void insert(int v,int &x,int y)
{
x=++tot;
memcpy(son[x],son[y],);
sum[x]=sum[y]+;
if (!v) return;
insert(v-,son[x][bz[v-]],son[y][bz[v-]]);
}
int find(int v,int x,int y)
{
if (!v) return ;
if (sum[son[x][bz[v-]]]>sum[son[y][bz[v-]]])
return find(v-,son[x][bz[v-]],son[y][bz[v-]])+(<<(v-));
return find(v-,son[x][-bz[v-]],son[y][-bz[v-]]);
}
int main()
{
n=read();q=read();
for (int i=;i<=n;i++)
{
int x=read();
for (int j=;j<L;x/=)bz[j++]=x%;
insert(L,root[i],root[i-]);
}
while (q--)
{
int x=read(),l=read(),r=read();
for (int j=;j<L;x/=)bz[j++]=-(x%);
printf("%d\n",find(L,root[r+],root[l]));
}
}
51nod1295的更多相关文章
- 51nod1295 XOR key(可持久化trie)
1295 XOR key题目来源: HackerRank基准时间限制:1.5 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个长度为N的正整数数组A,再给出Q个查询,每个查 ...
- 51nod1295 XOR key
第一次写可持久化trie指针版我... //Null 的正确姿势终于学会啦qaq... #include<cstdio> #include<cstring> #include& ...
- 51Nod--1295 XOR key (可持久化tire树)
题目链接 1295 XOR key 可持久化tire树模版题 数组一定要开够 不然数组不够的话就容易tle 吃了两次亏 #include<bits/stdc++.h> using name ...
- 51nod 1295 XOR key (可持久化Trie树)
1295 XOR key 题目来源: HackerRank 基准时间限制:1.5 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个长度为N的正整数数组A,再给出Q个查 ...
随机推荐
- PHP Extension
新手搞PHP ,之前用过 PERL, BASH: 所以开始用PHP 写程序上手比较快, 几天之后对PHP 的内部实现机制产生了兴趣,所以自己尝试着写写简单的PHP 扩展,以增加对PHP 的理解. ...
- CSS3屏幕密集媒体查询
html { font-size: 50px; } body { font-size: 24px; } @media screen and (max-width: 359px) { html { fo ...
- Unity3D学习笔记(二):个体层次、绝对和局部坐标、V3平移旋转
Directional Light:平行光源/方向性光源,用来模拟太阳光(角度只与旋转角度有关,与位置无关) Point Light:点光源,用来模拟灯泡,向四周发散光源 Spotlight:锥光源/ ...
- python从字符串解析方法名
方法如下 import requests func_name = 'get' fn_obj = getattr(requests,func_name) fn_obj('http://www.baidu ...
- UVa 1606 两亲性分子
https://vjudge.net/problem/UVA-1606 题意:平面上有n个点,每个点为白点或者黑点.现在需放置一条隔板,使得隔板一侧的白点数加上另一侧的黑点数总数最大.隔板上的点可以看 ...
- 【Python】【fmt】
[练习] #练习1:format print(format(3.44444,'.3e')) #3.444e+00 #练习2:findall() & finditer()import ...
- ubuntu16.04上安装Java
1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 ...
- ros 启动launch文件,附带参数
roslaunch cartographer_ros cartographer_ref.launch resolution:=0.07 #下面是cartographer_ref.launch的内容 & ...
- c++ 查找容器中符合条件的元素,并返回iterator(find_if)
#include <iostream> // std::cout #include <algorithm> // std::find_if #include <vecto ...
- html 画出矩形,鼠标弹起,矩形消失
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...