树状数组
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
LightOJ-1085-树状数组,离散化,dp
题目大意:求出一个序列中有多少个递增序列(不需要是连续的)。 题目解析:对于一个以i结尾的,那么dp[i]=sum(dp[j])+1(j AC代码: #include #include #include #include #include using namespace std; const int maxn=100010; const int mod=1000000007; int n,d原创 2016-11-22 20:45:30 · 297 阅读 · 0 评论 -
POJ-2155-二维树状数组
题目大意:给定一张n*n的网格图,有种操作为'C'代表翻转左下角(x1,y1),右上角为(x2,y2)的矩形,还有一种操作为询问格子(x,y); 题目解析:翻转操作肯定不可以暴力,根据imos,只需更新四个角落点就可以了,询问x,y的时候其实询问的是(x-1,y-1),因为lowbit有0的话会出现死循环,所以要把所有坐标都+1; AC代码: #include #include #inclu原创 2017-04-16 20:24:28 · 199 阅读 · 0 评论 -
POJ-1195-二维树状数组
题目大意:一张n*n的网格图,可以在某个格子加上某个值,询问的话是一个矩形区间; 题目解析:一道简单的二维树状数组,查询的话用sum(x2,y2)+sum(x-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1); AC代码: #include #include #include #include #include using namespace std; const in原创 2017-04-16 20:55:45 · 210 阅读 · 0 评论 -
POJ-2299-树状数组,离散化
题目大意:求一组数的逆序数有多少个; 题目解析: 用树状数组做,向下更新,向上求和; AC代码: #include #include #include #include #include using namespace std; typedef long long ll; const int maxn=500010; ll d[maxn],a[maxn]; struct node {原创 2017-04-16 21:24:46 · 511 阅读 · 1 评论 -
POJ-2481-树状数组
题目大意:求一个区间是多少个区间的真子集; 题目解析:先按照左边界从小到大排序,一样的话按照右边界降序排序,循环枚举的时候如果发现和前面的区间一模一样,那么直接等于前一个区间的答案即可; AC代码: #include #include #include #include #include using namespace std; const int maxn=100010; struct n原创 2017-04-21 14:30:28 · 288 阅读 · 0 评论 -
POJ-3067-树状数组
题目大意:东边有n座城市,西边有m座城市,现在连k跳线,问他们中有几个交点; 题目解析:就是逆序对的问题,注意答案要开long long并且如果两条线段如果起点或者终点相同是不算的,这样的话先按东边的点升序排序,相同的话按照西边的点排序,然后枚举的时候统计比西边城市比他大的点,再更新; AC代码: #include #include #include #include #include us原创 2017-04-21 15:26:31 · 189 阅读 · 0 评论 -
codeforces-827C-树状数组,同余定理
题目大意:给定一段DNA序列,和q个query,每次可以改变一个碱基,或者查询一个区间里面有多少个碱基与给定碱基序列(可以无限重复)相同; 题目解析:首先因为匹配序列可以无限循环,所以可以根据位置%长度来确定一般性,因为如果一个碱基的位置mod (len)与匹配序列一个碱基的位置mod(len)一样,那么这个无限延长的碱基序列一定能匹配到第一个碱基,所以我们可以BIT来维护前缀和,根据碱基种类,原创 2017-07-27 21:15:38 · 489 阅读 · 0 评论