本来是打算作为树剖练习的最后一题的,结果一直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. 精准医疗|研发药物|Encode|roadmap|

    生物医学大数据 精准医疗 研发药物:特异性靶点&过表达靶点 Encode &roadmap找组织特异性的表观遗传学标记.TF.DNA甲基化的动态变化等信息. 生物大数据的标准化与整合- ...

  2. slam库安装

    Ceres安装: 1.Ceres是一个cmak工程,首先要安装他的依赖项,使用apt-get安装. sudo apt-get install liblapack-dev libsuitesparse- ...

  3. Linux(CENTOS7) Nginx安装

    1.下载nginx  在disk目录下,输入以下命令进行下载: wget http://nginx.org/download/nginx-1.12.2.tar.gz 2.解压nginx 在disk目录 ...

  4. 动态类型识别&动态创建

    以下大部分内容摘自<windows程序设计 第2版> 王艳平 张铮 编著 动态类型识别:在程序运行过程中,辨别对象是否属于特定类的技术. 应用举例:函数辨别参数类型.需要针对对象的类编写特 ...

  5. Dynamics CRM - 在 Dynamics CRM 开发中创建一个 Entity 对象

    在 Dynamics CRM 的开发中,我们时不时需要创建 Entity 对象,而对于如何创建 Entity 对象,在 C# plugin 和 JS 的写法存在些许差异. 一.C# Plugin 创建 ...

  6. 17.3.12--urllib2模块

    1---urllib2是非常强大的Python网络资源访问模块,它的功能和urllib模块相似 python标准库中的urllib2模块可以说是urlib模块的一个升级的复杂版,不需要另外下载, 比如 ...

  7. RepeatSubmitInterceptor extends HandlerInterceptorAdapter

    package com.ruoyi.framework.interceptor; import java.lang.reflect.Method; import javax.servlet.http. ...

  8. C到C++转变简述

    从 C 到 C++ 语言的转变 1.平时使用还以 printf, scanf 为主 printf 和 scanf 与 cin cout 相比效率更快 2.头文件改成如下,C++对C语言兼容 #incl ...

  9. ios uiimagepickercontroller 选择相册或者拍照上传

    首先需要实现UIImagePickerControllerDelegate 代理 实现其imagePickerController 方法  这里用于选择图片或的拍照回调 //调用相机拍照 或者 图库选 ...

  10. 关于vue内只要html元素的代码

    使用v-model v-text v-html vue会解析出入的html代码报错 则上传sku的description时需要html页面的代码 所以在description 所在的表单元素内加入 v ...