【FZU 2277】Change
题意
有一颗有n个节点的有根树,根节点编号时1,每个结点都有一个值ai,开始的时候,所有节点的值都是0.
我们有q个操作,操作只有两种类型
1 v x k,a[v]+=x,a[v']+=x-k,a[v"]+=x-2*k... v'是结点v的孩子 。
2 v 输出a[v]mod 1e9+7。
分析
dfs序+线段树
下面的代码TLE了,一会再改,感觉没啥毛病哇
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
typedef long long LL; const int maxn=+;
const int MOD=;
int n,T,q,num ;
vector<int>child[maxn];
LL a[maxn],r[maxn],dep[maxn],val[maxn];
void dfs(LL u){
num++;
a[num]=u;
for(int i=;i<child[u].size();i++){
int v=child[u][i];
dep[v]=dep[u]+;
dfs(v);
}
r[u]=a[num];
return ;
}
LL addv[*maxn],kv[*maxn];
int ql,qr;
LL v,k; void update(int o,int L,int R){
if(ql<=L&&qr>=R){
addv[o]=(add[o]%MOD+v%MOD)%MOD;
kv[o]=(kv[o]%MOD+k%MOD)MOD;
return;
}
int M=L+(R-L)/;
if(ql<=M)
update(*o,L,M);
if(qr>M)
update(*o+,M+,R);
return;
}
//找到v的值
LL query(int o,int L,int R,LL adv,LL adk){
if(L==R){
return addv[o]+adv-dep[val[L]]*(kv[o]+adk);
}
int M=L+(R-L)/;
if(v<=M)
return query(*o,L,M,(adv%MOD+addv[o]%MOD)%MOD,(adk+kv[o])%MOD);
if(v>M)
return query(*o+,M+,R,(adv%MOD+addv[o]%MOD)%MOD,(adk%MOD+kv[o]%MOD)%MOD);
}
int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%d",&n);
for(int i=;i<=n;i++)child[i].clear();
num=;
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
child[x].push_back(i);
}
dep[]=;
dfs();
for(int i=;i<=n;i++)val[a[i]]=i;
memset(addv,,sizeof(addv));
memset(kv,,sizeof(kv));
scanf("%d",&q);
for(int i=;i<=q;i++){
int ty;
scanf("%d",&ty);
if(ty==){
int vv;
LL x;
scanf("%d%lld%lld",&vv,&x,&k);
ql=a[vv],qr=r[vv],v=x+dep[vv]*k;
// cout<<ql<<" "<<qr<<endl;
update(,,n);
}else{
int vv;
scanf("%d",&vv);
v=a[vv];
cout<<query(,,n,,)%MOD<<endl;
}
} /* for(int i=1;i<=num;i++)
printf("%d ",a[i]);
printf("\n");
for(int i=1;i<=n;i++){
printf("%d %d\n",i,r[i]);
}*/
}
return ;
}
【FZU 2277】Change的更多相关文章
- 【补】【FZU月赛】【20150515】【待续】
A FZU-2054 水题,比较A,B双方的最大值即可. B FZU-2055 string,截取‘.’之前和之后然后和给出的文件夹名和拓展名比较就好了啊,不明白为什么那么多人错. 代码: #incl ...
- 【FZU - 2150】Fire Game(bfs)
--> Fire Game 直接写中文了 Descriptions: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地 ...
- F - Change FZU - 2277 (DFS序+线段树)
题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【静默安装】configToolAllCommands响应文件问题
[静默安装]configToolAllCommands响应文件问题 客户在静默安装RAC 12.1.0.2的时候有如下的输出: Successfully Setup Software. As inst ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
- 【uTenux实验】互斥体
互斥体,维基百科中交互斥锁.其定义是这样的:互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制 ...
- 【计算机视觉领域】常用的 feature 提取方法,feature 提取工具包
[计算机视觉领域]常用的 feature 提取方法,feature 提取工具包 利用 VL 工具包进行各种特征的提取: VL 工具包官网地址:http://www.vlfeat.org/index.h ...
随机推荐
- linux rm删除含有特殊符号目录或者文件
想要删除time$1.class,用rm time$1.class是不行的,可以用 rm time"$"1.class 删掉 假设Linux系统中有一个文件名叫“-polo”. ...
- 一个高性能RPC框架的连接管理
既然说连接,先对EpollServer的连接管理做个介绍吧.客户端与服务器一次conn,被封装成为Connection类在服务器进行管理. 服务器连接有三种类型,分别为: enum EnumConne ...
- InpOut32 InputTest.cpp hacking
/************************************************************************************ * InpOut32 Inp ...
- [转载] C++中this指针的用法详解
摘自:http://blog.chinaunix.net/uid-21411227-id-1826942.html 1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响s ...
- Net Core网络通信
Net Core网络通信 https://www.cnblogs.com/xxred/p/9859893.html 聊聊如何设计千万级吞吐量的.Net Core网络通信! 作者:大石头 时间:2018 ...
- 文件上传smart
package com.bdqn.zhp.util; import java.text.SimpleDateFormat; import java.util.Date; import javax.se ...
- IIS安装步骤(WIN10)
打开控制面板 点开程序 点击“启动或关闭Windows功能,进入到启用或关闭windows功能之后我们选中“Internet Infomation Services”并勾选 点击确定 ...
- 使用appassembler-maven-plugin插件生成启动脚本
appassembler-maven-plugin可以自动生成跨平台的启动脚本,省去了手工写脚本的麻烦,而且还可以生成jsw的后台运行程序. 首先pom引入相关依赖 <build> < ...
- git 查看、创建、切换、删除、重命名和推送分支
1.查看本地所有分支:前面有 “*” 的是当前所处的分支 $ git branch test-A * test-B 2.查看本地和远程服务器的所有分支: $ git branch -a test-A ...
- erlang 应用获取系统参数
很多时候,我们的程序需要一些预定义的参数,比如上次说的tcp_server的例子 一般参数有几种途径,具体参考这里http://blog.yufeng.info/archives/2852 app里面 ...