2012年8月24日

HDOJ 4027 Can you answer these queries?

摘要: 此题陷阱多多:数据类型(相应的输入输出)、区间端点可能反序、如果用C提交注意强制转换的格式(int(x)是不对的);思路:每次如果开根号的区间内含有未达到0或1的数就一直向下,找到这些数并直接更新一次,这样最多跟新4*N次,加上线段树的复杂度,为4*N*lgN,是最坏情况的复杂度,可能由于开根号耗时较多,总体比较耗时(700ms+),查询的复杂度为lgN。# include <stdio.h># include <math.h># define N 100005# define ls ((r)<<1)# define rs ((r)<<1|1)# 阅读全文

posted @ 2012-08-24 21:40 getgoing 阅读(391) 评论(0) 推荐(0) 编辑

PKU 2892 Tunnel Warfare

摘要: 维护某个位置 i 左右可以到达的最大长度lx, ly,那么询问的输出为lx+ly-1(当然,如果 i 已经被标记(炸毁且尚未修复)输出0,这种情况加个判断);容易发现: 每次删除一个点时,这个点左边可以到达的所有点可以向右到达的最大长度要减去 ly,同理这个点右边的点可以到达左边的最大长度要减去 lx; 当修复一个点时,可以先询问它左(右)边的那个点的最大连通长度 lx(ly),那么可以对它前面 lx 个点向右可以到达的长度加上 ly+1,同理对它后面 ly 个点向左可以到达的最大长度加上 lx+1(两种操作都包含当前这个点),这样就相当于完成了修复;由于每次修复的是最近一次删除的点,可以.. 阅读全文

posted @ 2012-08-24 20:24 getgoing 阅读(247) 评论(0) 推荐(0) 编辑

HDOJ 3397 Sequence operation

摘要: 难在异或对询问区间最大连续1长度的影响,每次异或时,把异或标记更新到底(cover标记不为-1),直接更新当前最大连续1区间的长度。 1 # include <stdio.h> 2 3 # define N 100005 4 5 # define ls ((r)<<1) 6 # define rs ((r)<<1|1) 7 # define mid (((x)+(y))>>1) 8 9 int n, m, a[N]; 10 int cover[N<<2]; 11 int sum[N<<2], lcon[N<<2 阅读全文

posted @ 2012-08-24 17:23 getgoing 阅读(287) 评论(0) 推荐(0) 编辑

PKU 3667 Hotel

摘要: 维护左、右、总的连续区间长度,在 update 求总的最大长度时,写成了tsum[r] = Max(rsum[ls]+lsum[rs], Max(lsum[r], rsum[r])); 所以一直出错。/*notepad++ 调用 g++ 编译cmd /k C:\ACMSOFT\DEVC\Bin\g++.exe -g -W -Wall -o $(CURRENT_DIRECTION)\$(NAME_PART).exe $(FULL_CURRENT_PATH)*/# include <stdio.h># define ls ((r)<<1)# define rs ((r)&l 阅读全文

posted @ 2012-08-24 12:51 getgoing 阅读(226) 评论(0) 推荐(0) 编辑

导航