
ACM-树状数组
路小白_zZ
这个作者很懒,什么都没留下…
展开
-
hdu 4046(树状数组)
题意:有一个字符串,由字母w和b构成,然后有q次询问,0 a b 表示下标a到b出现了多少个wbw,重叠也算,1 a c 表示把下标a处的字母变为c。0操作每次都有输出。 题解:树状数组类型题,主要输出注意边界Sum(r - 1) - Sum(l),因为c[i]是包含str[i - 1]、str[i]、str[i +1]三个字符得到的,所以当询问[l , r]的答案时,应该右边界是r - 1,左边原创 2015-05-15 01:47:56 · 619 阅读 · 0 评论 -
uvalive 5902(BIT)
题意:有n本书叠放,编号从上到下是1到n,每次操作是先输出编号是i这本书的上面有几本书,然后把这本书抽出来放到顶上。 题解:位置数组pos[i]记录编号i的书的位置,树状数组Sun(C[i])统计位置i以下有多少本书,因为树状数组更新节点是往右走,所有对于节点i,右边节点应该表示节点i上面的书,所以位置数组要逆序,每次把书取出来前先把右边的节点更新,然后当前的书要放到最后一个节点的后面,后面节点还原创 2015-08-09 16:09:23 · 538 阅读 · 0 评论 -
Codeforces 276E(树状数组)
题意:一棵树有n个节点,1是根节点,根节点的子节点是单链,然后现在有两种操作0 v x d表示距离节点v为d的节点权值都加x,操作1 v问v节点的权值,初始节点权值都是0。 题解:看了别人的题解才会的,维护两种树,把每条单链都当做一个树状数组维护当前链上每个节点的权值,另一种是从根节点开始维护距离为x的节点的权值。#include <cstdio>#include <cstring>#incl原创 2015-08-21 00:20:50 · 1370 阅读 · 1 评论 -
zoj 3724(离线处理+树状数组)
题意:有n个城市,有n-1条大路是从i到i+1的有向边,权值为qi。还有m条小路,起点u终点v权值w。有q次询问,给出起点终点,问从起点到终点的最短路,并且小路最多只能走一次。 题解:想了很久还是看了题解http://www.cnblogs.com/chanme/p/3634576.html。 首先要把所有小路和询问一起离线处理,排序时把起点大的放前面,起点相同终点小的放前面,终点相同路的插入放原创 2015-09-01 21:23:51 · 563 阅读 · 0 评论 -
ural 1989(树状数组+多项式hash)
题意:给出一个字符串,有两种操作,一个是p a b,问字符串从位置a到位置b的子串是否是一个回文子串,另一个操作 c a b,把字符串位置a的字符替换为b。题解:因为字符串长度为1e5且问的次数也有1e5,所以暴力肯定是会超时的,然后考虑用树状数组维护字符串的hash值来解,两个操作分别用正反方向区间比对哈希值和单点修改。#include #include #include #def原创 2015-08-18 12:30:23 · 1288 阅读 · 0 评论 -
hdu 4605(树状数组+离散化)
题意:一棵树上每个节点都有权值,一个球从根节点往下走,每个球都有一个权值x,如果x大于当前节点的权值w[i],有1/8的概率走左边孩子节点,有7/8的概率走右边孩子节点,如果x等于当前节点的权值w[i]或者当前节点是叶子节点,则球停止下落,如果x小于当前节点的权值,各1/2的概率走左右孩子节点。现在给出一个球的权值和它的目的节点,问能走到目的节点的概率,概率是7^x/2^y,输出x y。题解:因为是原创 2015-08-17 23:50:52 · 469 阅读 · 0 评论 -
uvalive 4329(BIT)
题意:一条街上有n个运动员,平时会一起切磋,要求有三个人,住在中间的才可以当裁判,n个人都有对应的技能值,裁判的技能值要比一个人大比一个人小。按住所给出n个人的技能值,问有多少种切磋方式。题解:如果i当裁判,i左边的比他小的有ai个,右边比他大的有bi个,那么对于i有ai*(n - i - bi) + bi*(i - 1 - ai),然后代入了BIT二叉索引树的思想来解答。#include原创 2015-04-04 00:17:26 · 645 阅读 · 0 评论 -
poj 2481(树状数组)
题意:每个牛有两个属性值[S,E],如果牛i和牛j属性值满足Si <= Sj 且 Ej <= Ei 且 Ei - Si > Ej - Sj,牛i比牛j强壮,输出每个牛比自己强壮的牛的数量。 题解:把每个[Si,Ei],当做一个坐标点,会发现求的其实是每个点左上角有多少个点,那么可以把所有坐标点先按y降序排序然后x按升序,然后按用树状数组求和计算。#include <cstdio>#includ原创 2015-08-14 21:44:26 · 602 阅读 · 0 评论 -
hdu 4455(dp+树状数组)
题意:给出n个数字的序列,然后q次询问,长度为w的子串的不同数字个数之和。 题解:f[i]表示长度为w的子串不同数字个数之和,状态转移方程f[i] = f[i - 1] - 最后i-1个不同数字个数 + 每组从i-1到i多加的数字是否与前i-1个数字重复,那么最后i-1个不同数字个数循环一遍就能得到,然后用树状数组维护每个数字左边长度为i的区间内出现和自己相同的数字的个数之和。思路出自 http原创 2015-08-28 19:55:00 · 648 阅读 · 0 评论 -
hdu 1394(BIT求逆序数)
题意:有长度为n的序列,序列的数字是0~n-1组成,然后这个序列可以看做环,那么就有n个长度为n的序列,问n个序列里最小逆序数是多少。 题解:先把初始序列的逆序数算出来,然后移动每一个开头数字a到后面,逆序数变化的是比a大的数字逆序数加一,比a小的逆序数减一,所以按这个规律再循环一次找最小值就可以了。#include <cstdio>#include <cstring>#include <al原创 2015-08-11 23:12:04 · 888 阅读 · 0 评论 -
uvalive 2191(BIT)
题意:给出n个数字,操作有修改和输出区间和。 题解:树状数组模板水题。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 200005;int C[N], n;char str[10];int lowbit(int x) { return x & (-x原创 2015-08-09 10:38:20 · 624 阅读 · 0 评论 -
hdu 4533(树状数组)
题意:给出n个矩形的左下角和右上角坐标,问矩形(0,0),(ti,ti)内矩形面积是多少,重叠也算。 题解:参照http://blog.youkuaiyun.com/shiqi_614/article/details/8869676这里的题解,把所有矩形关于t的重叠面积计算式中的系数用树状数组维护,很机智。#include <stdio.h>#include <string.h>#include <ios原创 2015-08-23 19:54:41 · 573 阅读 · 0 评论 -
hdu 3333(树状数组)
题意:给出长度为n的数字序列,然后有q次询问,每次给出l r问区间[l, r]不同数字的和。 题解:因为询问次数有100000,可以离线处理,把所有询问存起来按右边界从小到大排序,这样再处理每个询问,最开始从位置1开始,从当前位置到他的右区间内,如果当前数字未被访问过,就把这个数字加入,如果已经访问过,就把之前位置加过的数字减掉,从当前位置再加入,这样就能保证询问区间内每个数字只被加一次。#inc原创 2015-11-01 00:48:11 · 844 阅读 · 0 评论