【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_ ...
随机推荐
- Spring MVC之cookies跟session 数据绑定
在我最早接触web开发的中学时代,学习的asp技术对于session的概念其实很清楚 Session("username")="张三"下次要用的时候,直接用se ...
- 纯CSS3制作九款可爱复古相机
前言 掐指一算,快两个月没写博客分享了.好吧,我就只是在准备校招而已.现在已经有满意的offer了,所以我就回来啦!这两个月过得挺煎熬也挺充实的.具体细说估计得长篇大论,我就不闲扯了.总之呢,越努力, ...
- 图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
通过 3 张图和 1 张表格,轻松区别 JavaScript Event 对象中的offsetX, clientX, pageX, screenX, layerX, x等属性. 一.测试代码如下: & ...
- 《JAVA与模式》之适配器模式(转)
在阎宏博士的<JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能 ...
- MySQL 约束的讲解
MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...
- 视频会议的3G智能手机移植技术
现今的视频会议系统已经兼容3G手机等移动终端设备,而3G智能手机使用的操作系统一般与PC的操作系统不一样,其开发环境一般都在PC上进行,通过模拟器在PC上进行手机系统的应用程序开发,而在这些操作系统上 ...
- Gradle tip #1: tasks
With this post I would like to start series of Gradle-related topics I wish I knew when I first star ...
- linux实践——字符集
一.ASCII码 首先是看得懂ASCII码表: 二 八 十 十六 缩写/字符 0000 0000 0 0 00 NUL(null) 0000 0001 1 1 01 SOH(start of head ...
- GDB堆栈跟踪与汇编调试
GDB堆栈跟踪与汇编调试 堆栈跟踪 源代码: 对预先编写的 stack.c 文件进行编译,并且使用 CGDB 进行调试,对堆栈进行跟踪,了解该代码堆栈是如何变化的. 在 CGDB 中,先设置 main ...
- Spring中@Component注解,@Controller注解详解
在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...