当前位置: 首页 > news >正文

全屏背景网站如何做到自适应/平台外宣推广技巧

全屏背景网站如何做到自适应,平台外宣推广技巧,永康网站建设优化建站,济宁网站建设神华【BZOJ4771】七彩树(主席树) 题面 BZOJ 题解 如果没有深度限制,每次只询问子树内的颜色个数,除了树套树\(dfs\)序加前驱或者后继强行二维数点之外,还有这样一种做法: 把所有相同颜色的点按照\(dfs\)序排序&…

【BZOJ4771】七彩树(主席树)

题面

BZOJ

题解

如果没有深度限制,每次只询问子树内的颜色个数,除了树套树\(dfs\)序加前驱或者后继强行二维数点之外,还有这样一种做法:
把所有相同颜色的点按照\(dfs\)序排序,每个点给自己的位置贡献\(1\),相邻的两个点给\(lca\)贡献\(-1\)。然后只要区间内存在这种颜色,则其子树内的权值和必定为\(1\)。那么只需要这样子染好所有颜色之后询问子树和。
然而这题要求的是深度在一个范围内的东西。
如果可以离线,我们可以把所有点按照深度排序,从上往下依次加入,计算贡献,然后把询问在\(dep[x]+d\)的地方计算答案。
现在不能离线,就提前把这个东西的线段树给算好,拿主席树直接提前维护好就行了。
时间复杂度是一个\(\log\)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
#define MAX 100100
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
struct Node{int ls,rs,v;}t[MAX<<7];
int rt[MAX],tot;
void Modify(int &x,int l,int r,int p,int w)
{t[++tot]=t[x];x=tot;t[x].v+=w;if(l==r)return;int mid=(l+r)>>1;if(p<=mid)Modify(t[x].ls,l,mid,p,w);else Modify(t[x].rs,mid+1,r,p,w);
}
int Query(int A,int l,int r,int L,int R)
{if(L<=l&&r<=R)return t[A].v;int mid=(l+r)>>1,ret=0;if(L<=mid)ret+=Query(t[A].ls,l,mid,L,R);if(R>mid)ret+=Query(t[A].rs,mid+1,r,L,R);return ret;
}
struct Line{int v,next;}e[MAX];
int h[MAX],cnt=1;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
int dfn[MAX],tim,dep[MAX],top[MAX],fa[MAX],size[MAX],hson[MAX],ln[MAX],low[MAX];
int n,Q,c[MAX],p[MAX];
set<int> S[MAX];set<int>::iterator t1,t2,t3;
void init()
{memset(rt,0,sizeof(rt));tot=0;memset(h,0,sizeof(h));cnt=1;memset(dfn,0,sizeof(dfn));tim=0;
}
void dfs1(int u,int ff)
{dep[u]=dep[ff]+1;size[u]=1;hson[u]=0;fa[u]=ff;for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(v==ff)continue;dfs1(e[i].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)if(e[i].v!=fa[u]&&e[i].v!=hson[u])dfs2(e[i].v,e[i].v);low[u]=tim;
}
int LCA(int u,int v)
{while(top[u]^top[v])dep[top[u]]<dep[top[v]]?v=fa[top[v]]:u=fa[top[u]];return dep[u]<dep[v]?u:v;
}
bool cmp(int a,int b){return dep[a]<dep[b];}
int St[MAX],sum;
int main()
{int T=read();while(T--){init();n=read();Q=read();for(int i=1;i<=n;++i)c[i]=read(),St[i]=c[i];sort(&St[1],&St[n+1]);sum=unique(&St[1],&St[n+1])-St-1;for(int i=1;i<=n;++i)c[i]=lower_bound(&St[1],&St[sum+1],c[i])-St;for(int i=2;i<=n;++i)Add(read(),i);dfs1(1,0);dfs2(1,1);for(int i=1;i<=n;++i)p[i]=i;sort(&p[1],&p[n+1],cmp);for(int i=1;i<=sum;++i)S[i].clear();for(int i=1,j=1;i<=dep[p[n]];++i){rt[i]=rt[i-1];while(j<=n&&dep[p[j]]==i){int u=p[j];S[c[u]].insert(dfn[u]);t1=t2=t3=S[c[u]].find(dfn[u]);t2--;t3++;Modify(rt[i],1,n,dfn[u],1);if(t1!=S[c[u]].begin())Modify(rt[i],1,n,dfn[LCA(ln[*t2],u)],-1);if(t3!=S[c[u]].end())Modify(rt[i],1,n,dfn[LCA(ln[*t3],u)],-1);if(t1!=S[c[u]].begin()&&t3!=S[c[u]].end())Modify(rt[i],1,n,dfn[LCA(ln[*t2],ln[*t3])],1);++j;}}int ans=0;while(Q--){int x=read()^ans,d=read()^ans;printf("%d\n",ans=Query(rt[min(dep[x]+d,dep[p[n]])],1,n,dfn[x],low[x]));}}
}

转载于:https://www.cnblogs.com/cjyyb/p/10282686.html

http://www.jmfq.cn/news/5263687.html

相关文章:

  • 两栏式网站/在线crm网站
  • 华为云云速建站怎样/冯耀宗seo教程
  • 网站开发使用框架原因/西安seo外包行者seo06
  • 微信网站开发视频教程/找回原来的百度
  • 开发网站开奖类游戏需要什么技术/谷歌外贸
  • 软文推广是什么意思?/西安seo诊断
  • 做网站用c语言吗/企业网站营销的典型案例
  • 天津公司网站建设费/自动seo系统
  • 怎样在阿里巴巴上做网站/交换链接平台
  • 织梦末班和dw建设网站哪个方便优化/百度推广登录页面
  • 建立个人网站要钱吗/手机网站怎么优化关键词
  • 聊城建设网站/品牌推广运营策划方案
  • 网站被挂马做js跳转/挖掘爱站网
  • 门户网站设计技巧/2023年7 8月十大新闻
  • 360网站卖东西怎么做的/怎么找当地的地推团队
  • 微信商城app/免费发布网站seo外链
  • 自己做微网站制作教程/爱站网官网
  • 搜狗搜索网站提交入口/游戏广告投放平台
  • 网站开发 文件上传慢/地推拉新app推广接单平台
  • flash建网站教程/推广引流工具
  • 给女朋友做的生日网站/宁波网站制作优化服务公司
  • 做网站js还是jq/网络营销公司招聘
  • 做企业网站代码那种好/搜外滴滴友链
  • 河北企业网站设计/品牌营销策划ppt
  • 怎么让网站能被百度到/惠州seo排名收费
  • 常熟建设局网站首页/企业网络营销青岛
  • 沈阳专门做网站/国内最新十大新闻
  • 西安优秀的集团门户网站建设企业/农产品网络营销
  • 外贸网站做多少钱的/市场调研报告1000字
  • 全国建设地产网站/seo优化网络推广