博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4999: This Problem Is Too Simple!
阅读量:5200 次
发布时间:2019-06-13

本文共 1842 字,大约阅读时间需要 6 分钟。

Description

给您一颗树,每个节点有个初始值。
现在支持以下两种操作:

  1. C i x(0<=x<2^31) 表示将i节点的值改为x。
  2. Q i j x(0<=x<2^31) 表示询问i节点到j节点的路径上有多少个值为x的节点。

解题报告:

用时:1h20min,3WA
简单题,对每一种颜色建一棵树链剖分的数组,可以持久化一下,动态加点,暴力搞搞即可
空间时间复杂度:\(O((n+m)logn)\)

#include 
#include
#include
#include
#include
#include
#define RG register#define il inline#define iter iterator#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std;const int N=100005;int n,m,head[N],num=0,to[N<<1],nxt[N<<1],col[N],id[N],DFN=0,b[N<<2],sum=0;struct question{int flag,x,y,z;}q[N<<1];void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;}int dep[N],top[N],fa[N],sz[N],son[N],tot;char s[3];void dfs1(int x){ int u;sz[x]=1; for(int i=head[x];i;i=nxt[i]){ u=to[i];if(dep[u])continue; dep[u]=dep[x]+1;fa[u]=x; dfs1(u); sz[x]+=sz[u]; if(sz[u]>sz[son[x]])son[x]=u; }}void dfs2(int x,int tp){ top[x]=tp;id[x]=++DFN; if(son[x])dfs2(son[x],tp); for(int i=head[x];i;i=nxt[i]) if(to[i]!=son[x] && to[i]!=fa[x])dfs2(to[i],to[i]);}int totnode=0,root[N<<2];struct node{int l,r,s;}t[N*160];void updata(int &rt,int last,int l,int r,int sa,int to){ rt=++totnode;t[rt]=t[last]; if(l==r){t[rt].s+=to;return ;} int mid=(l+r)>>1; if(sa>mid)updata(t[rt].r,t[last].r,mid+1,r,sa,to); else updata(t[rt].l,t[last].l,l,mid,sa,to); t[rt].s=t[t[rt].l].s+t[t[rt].r].s;}int query(int rt,int l,int r,int sa,int se){ if(l>se || r
>1; return query(t[rt].l,l,mid,sa,se)+query(t[rt].r,mid+1,r,sa,se);}int solve(int x,int y,int co){ int ret=0; while(top[x]!=top[y]){ if(dep[top[x]]
id[y])swap(x,y); ret+=query(root[co],1,n,id[x],id[y]); return ret;}void work(){ int x,y; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&col[i]),b[++sum]=col[i]; for(int i=1;i

转载于:https://www.cnblogs.com/Yuzao/p/7606727.html

你可能感兴趣的文章
Java自定义范型的应用技巧
查看>>
[洛谷1485] 火枪打怪
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
错了:用流量能够放肆,有wifi则要节制
查看>>
CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
查看>>
https://zhidao.baidu.com/question/362784520674844572.html
查看>>
第八周
查看>>
my.cnf_For5.7_注释版
查看>>
【MFC 学习笔记】CFile读写文件
查看>>
Java 的IO操作初步(一)
查看>>
关于VGA时序的相应计算方式
查看>>
电感和感抗
查看>>
PAT B1018.锤子剪刀布(20)
查看>>
Yii2.0 集成使用富头像上传编辑器
查看>>
Extjs控件之 grid打印功能
查看>>
检测多个Jar包冲突的class
查看>>
枚举类型(不常用)递归
查看>>
iOS开发基础篇-transform属性
查看>>
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>