【CF840E】In a Trap

题意:一棵n个点的树,第i个点权值为ai,q次询问,每次给定u,v(u是v的祖先),求对于所有在u-v上的点i,$a_i\ \mathrm{xor}\ dis(i,v)$的最大值。

$n\le 50000,q\le 150000,a_i\le n$

题解:考虑分块,每块大小为$2^8=256$,对于一个点v,我们从v往上走,每经过256个点便分为一块。即,对于一个块中的所有i,dis(i,v)的前8位是相同的,并且后8位是0...255,那么我们可以令块内每个i的权值变为{0...255} xor ai,此时我们只需要考虑询问的前8位就行了。那么我们令f[a][b]表示第a个块遇到一个前8位是b的询问时,答案的最大值是多少。我们可以将{0...255} xor ai扔到Trie树里,就能预处理出f数组了。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=50010;
const int B=256;
int f[maxn][B+4],fa[maxn][B+4],dep[maxn],head[maxn],nxt[maxn<<1],to[maxn<<1],ch[maxn][2],mx[maxn],v[maxn];
int n,m,tot,ans,cnt;
inline void insert(int v)
{
int i,x=1,d;
for(i=15;i>=8;i--)
{
d=(v>>i)&1;
if(!ch[x][d]) ch[x][d]=++tot,ch[tot][0]=ch[tot][1]=0,mx[tot]=0;
x=ch[x][d];
}
mx[x]=max(mx[x],v&255);
}
inline int query(int v)
{
int i,x=1,ret=0,d;
for(i=7;i>=0;i--)
{
d=!((v>>i)&1);
if(!ch[x][d]) d^=1;
else ret+=1<<(i+8);
x=ch[x][d];
}
ret+=mx[x];
return ret;
}
void dfs(int x)
{
int i;
fa[x][0]=x;
for(i=2;i<=B;i++) fa[x][i]=fa[fa[x][1]][i-1];
tot=1,ch[1][0]=ch[1][1]=0;
for(i=0;i<B;i++) if(fa[x][i]) insert(v[fa[x][i]]^i);
for(i=0;i<B;i++) f[x][i]=query(i);
for(i=head[x];i!=-1;i=nxt[i]) if(to[i]!=fa[x][1]) dep[to[i]]=dep[x]+1,fa[to[i]][1]=x,dfs(to[i]);
}
inline void add(int a,int b)
{
to[cnt]=b,nxt[cnt]=head[a],head[a]=cnt++;
}
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
int i,j,t,a,b;
for(i=1;i<=n;i++) v[i]=rd();
memset(head,-1,sizeof(head));
for(i=1;i<n;i++) a=rd(),b=rd(),add(a,b),add(b,a);
dep[1]=1,dfs(1);
for(i=1;i<=m;i++)
{
b=rd(),a=rd(),t=0,ans=0;
while(dep[fa[a][B-1]]>=dep[b]) ans=max(ans,f[a][t]),t++,a=fa[a][B];
for(j=0;j<=dep[a]-dep[b];j++) ans=max(ans,(t<<8|j)^v[fa[a][j]]);
printf("%d\n",ans);
}
return 0;
}//5 3 0 3 2 1 4 1 2 2 3 3 4 3 5 1 4 1 5 2 4

【CF840E】In a Trap 分块的更多相关文章

  1. CF840E In a Trap

    题意:给你一棵节点带权树.q个询问,每次询问u到v的路径上max(a[i]^dis(i,v))? 保证u是v的祖先,i是u->v路径上的点.n,ai<=5e4. 标程: #include& ...

  2. Codeforces 840E - In a Trap(树分块+trie)

    Codeforces 题面传送门 & 洛谷题面传送门 一道非常精彩,同时也很经典的题目.和这场的 C 一样经典 首先看到这个数据范围先猜正解复杂度:\(n\) 级别大于 \(q\),所以大概是 ...

  3. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  4. POJ2104 K-th Number [分块做法]

    传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...

  5. HDU 4467 分块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...

  6. 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  7. CC countari & 分块+FFT

    题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...

  8. bzoj2002弹(dan)飞绵羊 分块水过

    据说是道lct求深度的题 但是在小猫大的指点下用分块就n^1.5水过了 = =数据忘记加强系列 代码极其不美观,原因是一开始是听小猫大讲的题意,还以为是弹到最前面... #include <cs ...

  9. C语言两种查找方式(分块查找,二分法)

    二分法(必须要保证数据是有序排列的):   分块查找(数据有如下特点:块间有序,块内无序):    

随机推荐

  1. Zero-Copy实现原理

    参考文章 Nio Is Real 'Zero-Copy'?:https://dongc.github.io/2015/12/09/717/ 参考文章:Linux I/O (二):A Process O ...

  2. UGUI之控件以及按钮的监听事件系统

    using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class EventTrigg ...

  3. Java、C#双语版HttpHelper类(解决网页抓取乱码问题)

    在做一些需要抓取网页的项目时,经常性的遇到乱码问题.最省事的做法是去需要抓取的网站看看具体是什么编码,然后采用正确的编码进行解码就OK了,不过总是一个个页面亲自去判断也不是个事儿,尤其是你需要大量抓取 ...

  4. Mapper method 'com.autoyol.mapper.trans.AccountLogMapper.getTotalIncomByMemNoLastest attempted to return null from a method with a primitive return type (int).解决方法

    1.打开日志输出,降低日志级别. <AppenderRef ref="console" level="trace"></AppenderRef ...

  5. 开发者如何更好的选择和适应NoSQL的5个阶段

    基本含义 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关 ...

  6. Linux下的ssh远程访问

    准备工作:首先需要在windows系统中安装虚拟机,并在虚拟机中安装好linux操作系统,这里安装的是vmware player虚拟机和ubuntu版本的操作系统.关于该部分的安装在作者的其他经验中有 ...

  7. 基于NDK的Android防破解& Android防破解 【转载】

    两篇防破解文章转载 基于NDK的Android防破解:http://blog.csdn.net/bugrunner/article/details/8634585 Android防破解:http:// ...

  8. 5 -- Hibernate的基本用法 --4 2 hibernate.properties文件与hibernate.cfg.xml文件

    hibernate.properties : project\etc\hibernate.properties hibernate.cfg.xml : project\etc\hibernate.cf ...

  9. actor mysql 持久化之 specified actor

    持久化到mysql,要求一次操作涉及到的多次读写的事务性.使用的 library 是 postgresql-async, akka 版本是 2.11. 1. 实现 per-user 逻辑,简单来讲,就 ...

  10. NetBpm 配置篇(2)

    转载注明出处:http://www.cnblogs.com/anbylau2130/p/3877353.html 上一篇中介绍了Netbpm在IIS和CassiniWebServer服务器的安装 通过 ...