本来是打算作为树剖练习的最后一题的,结果一直WA。

本来以为是自己写的太丑。

最后发现5w的数据

我开了10w的数组

然而有一个数组要×2

哦,好棒棒。

 #include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define foru(i,x,y) for(LL i=x;i<=y;i++)
using namespace std;
typedef int LL;
const LL N=2e5;
const LL mod=;
struct edge{LL to,nxt;}e[*N];
struct node{LL s,t;}t[*N];
struct que{LL id,flag,p;}a[N];
LL f[N],b[N],d[N],id[N],ans[N],siz[N],son[N],top[N],head[N],
cnt,ne,n,m,nq,q[N]; bool cmp(que a,que b){return a.p<b.p;} void add(LL a,LL b){
e[++ne]=(edge){b,head[a]};head[a]=ne;
} void dfs(LL k,LL fa,LL dep){
f[k]=fa;d[k]=dep;siz[k]=;son[k]=;
for(LL i=head[k];i;i=e[i].nxt){
LL v=e[i].to;
if(v==fa)continue;
dfs(v,k,dep+);
siz[k]+=siz[v];
if(siz[v]>siz[son[k]])son[k]=v;
}
} void build(LL k,LL tp){
id[k]=++cnt;top[k]=tp;
if(son[k])build(son[k],tp);
for(LL i=head[k];i;i=e[i].nxt){
LL v=e[i].to;
if(v!=son[k]&&v!=f[k])build(v,v);
}
} #define mid ((L+R)>>1)
#define ls (k<<1)
#define rs ls+1 void pd(LL k,LL L,LL R){
t[k].s+=t[k].t*(R-L+);
if(t[k].s>=mod)t[k].s%=mod;
t[ls].t+=t[k].t; t[rs].t+=t[k].t;
t[k].t=;
} void pu(LL k,LL L,LL R){
t[k].s=t[ls].s+t[rs].s;
if(t[k].s>=mod)t[k].s%=mod;
} void update(LL k,LL L,LL R,LL l,LL r,LL x){
pd(k,L,R);
if(r<L||l>R)return;
if(l<=L&&R<=r){t[k].t+=x;return;}
update(ls,L,mid,l,r,x); update(rs,mid+,R,l,r,x);
pd(ls,L,mid);pd(rs,mid+,R);
pu(k,L,R);
} LL qur(LL k,LL L,LL R,LL l,LL r){
pd(k,L,R);
if(l>R||r<L)return ;
if(l<=L&&R<=r)return t[k].s;
return qur(ls,L,mid,l,r)+qur(rs,mid+,R,l,r);
} LL get(LL x){
LL ret=;
while(x){
ret+=qur(,,cnt,id[top[x]],id[x]);
if(ret>=mod)ret%=mod;
x=f[top[x]];
}
return ret;
} void change(LL x){
while(x){
update(,,cnt,id[top[x]],id[x],);
x=f[top[x]];
}
}
int main(){
LL x,l,r;
scanf("%d%d",&n,&m);
foru(i,,n){
scanf("%d",&x);x++;
add(x,i);add(i,x);
}
foru(i,,m){
scanf("%d%d%d",&l,&r,&q[i]);q[i]++;
a[++nq].p=l;a[nq].id=i;a[nq].flag=-;
a[++nq].p=r+;a[nq].id=i;a[nq].flag=;
}
dfs(,,);
build(,);
sort(a+,a++nq,cmp);
LL j=;
while(!a[j+].p)j++;
foru(i,,n){
change(i);
while(a[j+].p==i)j++,ans[a[j].id]+=get(q[a[j].id])*a[j].flag;
}
foru(i,,m)printf("%d\n",(ans[i]+mod)%mod);
return ;
}

树剖想法题——BZOJ3626的更多相关文章

  1. 洛谷树剖模板题 P3384 | 树链剖分

    原题链接 对于以u为根的子树,后代节点的dfn显然比他的dfn大,我们可以记录一下回溯到u的dfn,显然这两个dfn构成了一个连续区间,代表u及u的子树 剩下的就和树剖一样了 #include< ...

  2. A - Aragorn's Story HDU - 3966 树剖裸题

    这个题目是一个比较裸的树剖题,很好写. http://acm.hdu.edu.cn/showproblem.php?pid=3966 #include <cstdio> #include ...

  3. 树剖裸题——BZOJ1036 树的统计

    #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #defi ...

  4. CF487E Tourists 【圆方树 + 树剖 + 堆】

    题目链接 CF487E 题解 圆方树 + 树剖 裸题 建好圆方树维护路径上最小值即可 方点的值为其儿子的最小值,这个用堆维护 为什么只维护儿子?因为这样修改点的时候就只需要修改其父亲的堆 这样充分利用 ...

  5. SPOJ375Query on a tree I(树剖+线段树)(询问边)

    ιYou are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...

  6. NOI2015软件包管理器 树剖线段树

    题目: 一棵树,兹磁 1.查询根到一个点的染色点数并全染好 2.查询子树内染色点数并把颜色洗掉 树剖裸题,丝毫不虚(为什么我考试的时候碰不到这种好题呢)好像20min写完搞定 #include < ...

  7. [NOI2015,LuoguP2146]软件包管理器------树剖

    ***题目链接戳我*** 又是在树上瞎搞滴题目.... 我们如果以安装的软件为1,未安装的软件为0,那么软件改变的数量即树上权值总和的数量,涉及到区间修改,区间查询,考虑树剖 分析完毕,似乎没啥好说的 ...

  8. bzoj4034: [HAOI2015]树上操作(树剖)

    4034: [HAOI2015]树上操作 题目:传送门 题解: 树剖裸题: 麻烦一点的就只有子树修改(其实一点也不),因为子树编号连续啊,直接改段(记录编号最小和最大) 开个long long 水模版 ...

  9. SP375 QTREE - Query on a tree (树剖)

    题目 SP375 QTREE - Query on a tree 解析 也就是个蓝题,因为比较长 树剖裸题(基本上),单点修改,链上查询. 顺便来说一下链上操作时如何将边上的操作转化为点上的操作: 可 ...

随机推荐

  1. windows 10 远程连接出现CredSSP加密Oracle修正错误

    以下方法只受用于windows专业版或者企业版 . 解决方法: 运行 gpedit.msc 本地组策略: 计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并 ...

  2. Golang的学习方法

  3. xhell ctrl+s 假死

    如题. ctrl+q 即可接触 假死状态. 记录下

  4. Leetcode第1题:两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素.示例:给定 nums ...

  5. Pytorch学习--编程实战:猫和狗二分类

    Pytorch学习系列(一)至(四)均摘自<深度学习框架PyTorch入门与实践>陈云 目录: 1.程序的主要功能 2.文件组织架构 3. 关于`__init__.py` 4.数据处理 5 ...

  6. LNMP安装问题

    查什么占用了端口   netstat -nlp |grep :80 root@zzx:/usr/local/mysql# netstat -nlp |grep :80tcp        0      ...

  7. [腾讯 TMQ] 接口测试用例设计

    接口测试 [腾讯 TMQ] 接口测试用例设计 腾讯移动品质中心 · 2018年01月17日 · 最后由 于静 回复于 20 天前 · 21794 次阅读 本帖已被设为精华帖! 目录 作者:刘燕 团队: ...

  8. Java之同步方法处理实现Runnable接口的线程安全问题

    /** * 使用同步方法解决实现Runnable接口的线程安全问题 * * * 关于同步方法的总结: * 1. 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明. * 2. 非静态的同步方法,同 ...

  9. 面向对象 part7 class

    类的定义 类实际上是个“特殊的函数“,就像能够定义函数表达式和函数声明一样,类语法 有两个组成部分:类表达式和类声明式 类声明 类声明没有提升 静态方法 只有构造函数名可以调用,实例无法使用.常用于应 ...

  10. 针对Oracle的一系列操作

    一.有关于数据库导出dmp的语句. 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/manager@TEST file=d ...