本文共 1491 字,大约阅读时间需要 4 分钟。
很明显的是\(Trie\)树上暴力判断答案
#include #include #include #include #include #include #include #include #include #include using namespace std;#define ll long long#define RG register#define MAX 111111inline int read(){ RG int x=0,t=1;RG char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t;}struct Line{int v,next;}e[MAX<<1];int h[MAX],cnt=1;inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}int dfn[MAX],low[MAX],tim,dep[MAX],fa[MAX],size[MAX],hson[MAX],top[MAX],ln[MAX];int rt[MAX],n,Q,V[MAX];void dfs1(int u,int ff){ dep[u]=dep[ff]+1;size[u]=1;fa[u]=ff; for(int i=h[u];i;i=e[i].next) { int v=e[i].v;if(v==ff)continue; dfs1(v,u);size[u]+=size[v]; if(size[v]>size[hson[u]])hson[u]=v; }}void dfs2(int u,int tp){ top[u]=tp;dfn[u]=++tim;ln[tim]=u; if(hson[u])dfs2(hson[u],tp); for(int i=h[u];i;i=e[i].next) { int v=e[i].v;if(v==fa[u]||v==hson[u])continue; dfs2(v,v); } low[u]=tim;}struct Node{int son[2],v;}t[MAX*50];int tot;void Modify(int &x,int p,int w){ t[++tot]=t[x];x=tot;t[x].v++; if(w==-1)return; if(p&(1< dep[v])swap(u,v); ret=max(ret,Query(rt[dfn[u]-1],rt[dfn[v]],x,30)); return ret;}int main(){ n=read();Q=read(); for(int i=1;i<=n;++i)V[i]=read(); for(int i=1;i
转载于:https://www.cnblogs.com/cjyyb/p/9199237.html