【HDU 3966】Aragorn's Story(未完待续)
我无限Runtime Error(ACCESS_VIOLATION)。不知道怎么搞得/(ㄒoㄒ)/~~
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i));
using namespace std;
const int MAX=50010;
inline const int max(const int &a,const int &b){return a>b?a:b;}
inline const int min(const int &a,const int &b){return a<b?a:b;}
inline void swapp(int &a,int &b){int c=a;a=b;b=c;}
struct node{int to,nxt;}E[MAX<<1];
int N,point[MAX],cnt,sum[MAX<<2],up[MAX],lazy[MAX<<2],size[MAX],son[MAX],fa[MAX],tot,which[MAX],pos[MAX],deep[MAX],w[MAX];
inline void init(){CC(point,0);CC(deep,0);CC(sum,0);CC(up,0);CC(lazy,0);CC(size,0);CC(son,0);CC(fa,0);CC(which,0);CC(pos,0);CC(deep,0);CC(w,0);cnt=0;tot=0;}
inline void insect(int x,int y){E[++cnt].nxt=point[x];E[cnt].to=y;point[x]=cnt;}
inline void dfs1(int x){
int nmax=0,num=0;
size[x]=1;
for(int tmp=point[x];tmp;tmp=E[tmp].nxt)if(E[tmp].to!=fa[x]){
fa[E[tmp].to]=x;
deep[E[tmp].to]=deep[x]+1;
dfs1(E[tmp].to);
size[x]+=size[E[tmp].to];
if (size[E[tmp].to]>nmax){nmax=size[E[tmp].to];num=E[tmp].to;}
}son[x]=num;
}
inline void dfs2(int x){
pos[x]=++tot;which[tot]=x;
if (!son[x]) return;
up[son[x]]=up[x];
dfs2(son[x]);
for(int tmp=point[x];tmp;tmp=E[tmp].nxt)if((E[tmp].to!=fa[x])&&(E[tmp].to!=son[x])){
up[E[tmp].to]=E[tmp].to;
dfs2(E[tmp].to);
}
}
inline void pushup(int rt){sum[rt]=sum[rt<<1]+sum[rt<<1|1];}
inline void pushdown(int ln,int rn,int rt){
if (lazy[rt]!=0){
lazy[rt<<1]+=lazy[rt];
lazy[rt<<1|1]+=lazy[rt];
sum[rt<<1]+=ln*lazy[rt];
sum[rt<<1|1]+=rn*lazy[rt];
lazy[rt]=0;
}
}
inline void buildtree(int l,int r,int rt){
if (l==r){sum[rt]=w[which[l]];return;}
int mid=(l+r)>>1;
buildtree(l,mid,rt<<1);
buildtree(mid+1,r,rt<<1|1);
pushup(rt);
}
inline void addtree(int L,int R,int ad,int l,int r,int rt){
if ((L<=l)&&(r<=R)){lazy[rt]+=ad;sum[rt]+=ad*(r-l+1);return;}
int mid=(l+r)>>1;
pushdown(mid-l+1,r-mid,rt);
if (L<=mid) addtree(L,R,ad,l,mid,rt<<1);
if (R>mid) addtree(L,R,ad,mid+1,r,rt<<1|1);
pushup(rt);
}
inline void addd(int x,int y,int k){
while (up[x]!=up[y]){
if (deep[up[x]]<deep[up[y]])swapp(x,y);
addtree(pos[up[x]],pos[x],k,1,N,1);
x=fa[up[x]];
}if (deep[x]>deep[y])swapp(x,y);
addtree(pos[x],pos[y],k,1,N,1);
}
inline void query(int po,int l,int r,int rt){
if (l==r){printf("%d\n",sum[rt]);return;}
int mid=(l+r)>>1;
pushdown(mid-l+1,r-mid,rt);
if (po<=mid) query(po,l,mid,rt<<1);
else query(po,mid+1,r,rt<<1|1);
}
int main(){
int M,Q,x,y,c1,c2,k; char c;
while (~scanf("%d%d%d\n",&N,&M,&Q)){
init();
for1(i,1,N)scanf("%d",&w[i]);
for1(i,1,M){
scanf("%d%d\n",&x,&y);
insect(x,y);insect(y,x);
}deep[1]=1;
dfs1(1);
up[1]=1;
dfs2(1);
buildtree(1,N,1);
while(Q--){
c=getchar();
switch(c){
case 'I':
scanf("%d%d%d\n",&c1,&c2,&k);
addd(c1,c2,k);
break;
case 'D':
scanf("%d%d%d\n",&c1,&c2,&k);
addd(c1,c2,k*(-1));
break;
case 'Q':
scanf("%d\n",&k);
query(which[k],1,N,1);
break;
}
}
}return 0;
}
等省选完再看为什么RE吧,现在还有很多东西要学,在此存一下代码。

【HDU 3966】Aragorn's Story(未完待续)的更多相关文章
- HDU - 3966 Aragorn's Story(树链剖分入门+线段树)
HDU - 3966 Aragorn's Story Time Limit: 3000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 关于DOM的一些总结(未完待续......)
DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...
- MVC丶 (未完待续······)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
- 一篇文章让Oracle程序猿学会MySql【未完待续】
一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...
- HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树
HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...
- [python]爬代理ip v2.0(未完待续)
爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...
随机推荐
- linux下安装+配置+卸载jdk
一. 解压安装jdk在shell终端下进入jdk1.7.0_55.bin文件所在目录, 执行命令 ./jdk1.7.0_55.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes, ...
- [反编译U3D]Decompile Unity Resources
工具说明 反编译unity project资源文件,包括ios,android,pc等平台资源,仅供学习使用! 以下工具任选其一,未有特殊说明是可以同时提取unity3.x,unity4.x,unit ...
- Python-操作Memcache、Redis、RabbitMQ、
Memcache 简述: Memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要 ...
- Expression<Func<T,TResult>>和Func<T,TResult>
1.Expression<Func<T,TResult>>是表达式 //使用LambdaExpression构建表达式树 Expression<Func<int, ...
- OAF 中对文字实现html效果及对超级长文本实现默认换行,对只读的messageTextInput中的内容自动换行
今天遇到一个需求,客户注册页面客户化了一个超级长的注册须知,内容很多.但是样式相对又要做起来好看点. 注册须知的内容使用多个message拼接而成. 老大说rawText支持html样式,于是我想到了 ...
- windows7下修改hosts文件无效解决办法
通常会为了开发方便.或者屏蔽掉一些恶意网站,我们会在hosts(c:\windows\system32\drivers\etc\hosts)文件中进行相应的域名指向,例:
- Resource interpreted as Script but transferred with MIME type text/plain:
我用script做ajax跨域,请求返回的是个文本字符串,chrome提示:Resource interpreted as Script but transferred with MIME type ...
- 传智播客C++第五期培训视频教程免费下载
C/C++的应用领域几乎无处不在,服务器,嵌入式,物联网,移动互联网,信息安全,游戏,基本上大小通吃.C/C++市场份额高达26%,也就是每四个程序员就有一个C/C++程序员.市场需求量非常大,而且工 ...
- Android自定义单选,自定义选中状态
如图,此布局用GrildView实现,弹出框由Activity的dialog样式实现. 屏蔽系统GrildView点击背景黄色: grildview.setSelector(new ColorDraw ...
- Python解析器源码加密系列之(一):标准c的tmpfile()、tmpfile_s()生成的临时文件究竟放在哪里了?
这两天由于修改python解释器的需求,需要用到tmpfile()来生成临时文件的FILE*,但是又担心这个临时文件是否存在于磁盘的某个地方,终究会被人找到,所以就简单做了以下几点实验,看看是否可以找 ...