
树状数组
文章平均质量分 81
wjf1514
这个作者很懒,什么都没留下…
展开
-
HDU 4267 A Simple Problem with Integers
树状数组。2种操作,1 a b k c :表示把a到b区间内所有下标为i且满足(i - a) % k == 0的值加c,也就是说,下标从a开始,每次加k,直到超过b。2 a:表示询问a点的值。当k等于1时,就是成段更新,单点查询。想到这里不妨把数字分组,对k取余相同的数进一组,那么对每组来说,都是成段更新。单点查询时只需把a在10个组内的值都加起来,再加上原来的值,就是当前a点的值了。然而原创 2013-09-10 18:31:05 · 600 阅读 · 0 评论 -
HDU 4046 Panda
树状数组。给出一个由b,w组成的字符串,两种操作,一个是询问区间[a,b]内wbw的个数,另一个是更改a点的字符。当连续三个字符符合wbw时在第二个w的下标处(树状数组中)加1。每次更新时,分三种情况讨论。每次询问时,注意区间,注意每个坐标的含义。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#incl原创 2013-09-12 15:48:30 · 986 阅读 · 0 评论 -
HDU 4031 Attack
树状数组。每个点都有护盾,每次攻击一片,被攻击的点就破盾,需要T秒充能,在充能期间被击中就会受伤,询问单点受伤次数。用树状数组来维护每个点被击中的次数,并保存下来攻击的区间。询问时先求出该点被击中次数,再减去成功防御的次数,就是受伤的次数。#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include原创 2013-09-13 12:44:51 · 847 阅读 · 0 评论 -
UVALive 5902 Movie collection
树状数组。一些电影盘摞成一摞,抽出第x个,输出它上边有多少个,再把x放到顶部。求x上面的盘的个数就是前缀和,就往树状数组上想。每次取出再放到顶上,我们不可能往0,-1,-2...上放,数组要反过来,下表从小到大表式光盘从最下边的到最上边的值(该盘上面的盘数,用总数减一下就可得到)。话句话说,每个点存的是它下面的盘数。取的时候,下面的值不变,上面的加一。#pragma comment(lin原创 2013-09-30 16:47:33 · 634 阅读 · 0 评论 -
POJ 2155 Matrix
二维入门题。树状数组和线段树都可以,看过论文的话二维树状数组就应该能懂,而二维线段树就要麻烦一些,时刻想着树套树。二维树状数组#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#in原创 2013-09-18 12:06:15 · 633 阅读 · 0 评论 -
UVALive 2191 Potentiometers
树状数组。对点更新,区间求和。用线段树会比较省心。而树状数组的数组中保存的并不都是单点的值,不能直接赋值(至少我现在不会。。。)。所以只要解决如何更新点的值,剩下的就是默写模板了。在开一个数组来记录每个点的值,每次更新时,用新旧两个差值来更新树状数组,要记得记录点的新值。区间求和时注意左端点是开的,右端点是闭的。#include#include#include#include#incl原创 2013-08-29 09:51:59 · 528 阅读 · 0 评论 -
UVALive 4329 Ping pong
树状数组。考虑ai(从0开始,则i左边共i个,右边n-i-1个),左边有x个比他大的,i-x个比他小的,右边有y个比他大的,n-i-1-y个比他大的。交叉乘一下就得到了以ai为裁判的比赛总数。把所有人都枚举一遍,加在一起就是答案,会超int。如何才能知道ai左边有多少比他小的呢?原创 2013-08-29 09:45:32 · 678 阅读 · 0 评论