开店简化版。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 50010
#define P 201314
int n,m,q,t=,a[N],p[N];
int fa[N],top[N],id[N],size[N],son[N],cnt=;
struct data{int to,nxt;
}edge[N<<];
int root[N];
struct data2{int l,r,tag,x;
}tree[N<<];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
bool cmp(const int&x,const int&y)
{
return a[x]<a[y];
}
void dfs1(int k)
{
size[k]=;
for (int i=p[k];i;i=edge[i].nxt)
{
fa[edge[i].to]=k;
dfs1(edge[i].to);
size[k]+=size[edge[i].to];
if (size[edge[i].to]>size[son[k]]) son[k]=edge[i].to;
}
}
void dfs2(int k,int from)
{
top[k]=from;id[k]=++cnt;
if (son[k]) dfs2(son[k],from);
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=son[k])
dfs2(edge[i].to,edge[i].to);
}
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
void add(int &k,int l,int r,int x,int y)
{
if (x>y) return;
tree[++cnt]=tree[k];k=cnt;
inc(tree[k].x,y-x+);
if (l==x&&r==y){tree[k].tag++;return;}
int mid=l+r>>;
if (y<=mid) add(tree[k].l,l,mid,x,y);
else if (x>mid) add(tree[k].r,mid+,r,x,y);
else add(tree[k].l,l,mid,x,mid),add(tree[k].r,mid+,r,mid+,y);
}
int query(int k,int l,int r,int x,int y,int tag)
{
if (x>y) return ;
if (l==x&&r==y) return (tree[k].x+1ll*(y-x+)*tag%P)%P;
tag+=tree[k].tag;
int mid=l+r>>;
if (y<=mid) return query(tree[k].l,l,mid,x,y,tag);
else if (x>mid) return query(tree[k].r,mid+,r,x,y,tag);
else return (query(tree[k].l,l,mid,x,mid,tag)+query(tree[k].r,mid+,r,mid+,y,tag))%P;
}
void modify(int i,int x)
{
while (x)
{
add(root[i],,n,id[top[x]],id[x]);
x=fa[top[x]];
}
}
int getans(int r,int l,int x)
{
int s=;
while (x)
{
inc(s,query(root[r],,n,id[top[x]],id[x],)-query(root[l],,n,id[top[x]],id[x],));
if (s<) s+=P;
x=fa[top[x]];
}
return s;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3626.in","r",stdin);
freopen("bzoj3626.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),q=read();
for (int i=;i<=n;i++)
{
int x=read();
addedge(x+,i);
}
dfs1();
dfs2(,);
cnt=;
for (int i=;i<=n;i++)
{
root[i]=root[i-];
modify(i,i);
}
for (int i=;i<=q;i++)
{
int l=read()+,r=read()+,x=read()+;
printf("%d\n",getans(r,l-,x));
}
return ;
}

BZOJ3626 LNOI2014LCA(树链剖分+主席树)的更多相关文章

  1. dfs序+主席树 或者 树链剖分+主席树(没写) 或者 线段树套线段树 或者 线段树套splay 或者 线段树套树状数组 bzoj 4448

    4448: [Scoi2015]情报传递 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 588  Solved: 308[Submit][Status ...

  2. Codechef FIBTREE 树链剖分 主席树 LCA 二次剩余 快速幂

    原文链接https://www.cnblogs.com/zhouzhendong/p/CC-FIBTREE.html 题目传送门 - CC-FIBTREE 题意 给定一个有 $n$ 个节点,初始点权都 ...

  3. BZOJ1146 [CTSC2008]网络管理Network 树链剖分 主席树 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1146 题意概括 在一棵树上,每一个点一个权值. 有两种操作: 1.单点修改 2.询问两点之间的树链 ...

  4. bzoj 4448 [Scoi2015]情报传递 (树链剖分+主席树)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4448 题面: Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络 ...

  5. BZOJ 4448: [Scoi2015]情报传递 树链剖分 主席树

    4448: [Scoi2015]情报传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4448 Description 奈特公司是一个巨 ...

  6. [GDOI2016][树链剖分+主席树]疯狂动物城

    题面 Description Nick 是只在动物城以坑蒙拐骗为生的狐狸,儿时受到偏见的伤害,放弃了自己的理想.他被兔子 Judy 设下圈套,被迫与她合作查案,而卷入意想不到的阴谋,历尽艰险后成为搭档 ...

  7. HDU 5111 Alexandra and Two Trees 树链剖分 + 主席树

    题意: 给出两棵树,每棵树的节点都有一个权值. 同一棵树上的节点的权值互不相同,不同树上节点的权值可以相同. 要求回答如下询问: \(u_1 \, v_1 \, u_2 \, v_2\):询问第一棵树 ...

  8. 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治

    LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...

  9. BZOJ3531 SDOI2014 旅行 - 树链剖分,主席树

    题意:给定一棵树,树上每个点有权值和类型.支持:修改某个点的类型:修改某个点的权值:询问某条链上某个类型的点的和/最大值.点数/类型数/询问数<=100000. 分析: 树链剖分,对每个类型的点 ...

  10. BZOJ4012 HNOI2015开店(树链剖分+主席树)

    考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑:询问某点到所有黑点的距离之和. 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2.要求 ...

随机推荐

  1. P4208 [JSOI2008]最小生成树计数

    现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)输出方案数对31011 ...

  2. International Programming Retreat Day(2018.11.17)

    时间:2018.11.17地点:北京国华投资大厦

  3. zuul简单使用

    zuul路由的几个配置参数1.静态路由 zuul: routes: myroute1: path: /mypath/** url: http://localhost:8080 (注意这里url要htt ...

  4. [Spark][Python]DataFrame的左右连接例子

    [Spark][Python]DataFrame的左右连接例子 $ hdfs dfs -cat people.json {"name":"Alice",&quo ...

  5. [Oracle]GoldenGate官方文档

    Extracting Data in Oracle GoldenGate Integrated Capture Mode http://www.oracle.com/technetwork/datab ...

  6. [python][spark]wholeTextFiles 读入多个文件的例子

    $pwd /home/training/mydir $cat file1.json {"firstName":"Fred", "lastName&qu ...

  7. GATT服务搜索流程(一)

    GATT的规范阅读起来还是比较简答, 但是这样的规范在代码上是如何实现的呢?下面就分析一下bluedroid 协议栈关于GATT的代码流程. BLE的设备都是在SMP之后进行ATT的流程的交互.从代码 ...

  8. Centos下DNS+NamedManager高可用部署方案完整记录

    之前说到了NamedManager单机版的配置,下面说下DNS+NamedManager双机高可用的配置方案: 1)机器环境 主机名 ip地址 dns01.kevin.cn 192.168.10.20 ...

  9. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)

    在linux系统下,如果下载并安装了应用程序,在启动时很有可能在键入它的名称时出现"command not found"的提示内容.如果每次都到安装目标文件夹内,找到可执行文件来进 ...

  10. v-for v-if || v-else

    <el-col> <div v-for="item in resultDetail" class="physical-content" v-i ...