树状数组
HelloWorld10086
追随大神的脚步
展开
-
HDU - 1394 Minimum Inversion Number(树状数组 or 线段树)
题意: 给n个数字(0到n-1无重复),可以拿前面任意m个放到末尾。求拿多少个数字放到末尾后数列的逆序数最小。解析: 逆序列个数是n个,如果把a[1]放到a[n]后面,逆序列个数会减少a[1]个,相应会增加n-(a[1]+1)个 比如说: 序列 3 6 9 0 8 5 7 4 2 1 把3移到后面,则它的逆序数会减少3个(0 2 1) 但同时会增加 n - a[i] - 1原创 2015-03-08 18:19:15 · 656 阅读 · 0 评论 -
POJ - 2481 Cows(线段树单点更新)
题意: 两个区间:[Si, Ei] 和 [Sj, Ej] (0 <= S < E <= 10^5) 若 Si <= Sj,且 Ej <= Ei 且 Ei - Si > Ej - Sj, 则第i个区间覆盖第j个区间,即牛i比牛j强壮。问对于每一头牛i有多少头牛比它强壮。解析: 这题先一看,不知如何下手。首先,将每个区间的S和E当做是(S,E)一个点,这样子把所有点在坐标系上画出来,你就原创 2015-03-26 19:48:19 · 524 阅读 · 0 评论 -
SUG 180 Inversions(树状数组+离散化)
题意: 求逆序数的个数,因为题目没说是从1~n,所以要离散化。心得: 这题wa了好多次,是因为询问时 query(order[i]-1) 写错成 query(order[i])。AC代码#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using na原创 2015-03-09 20:54:57 · 736 阅读 · 0 评论 -
HDU - 3743 Frosh Week(树状数组+离散化)
题意: 给你一个长度为n的序列(最长100万),每次只能交换相邻的两个数字,问最小交换多少次,能使得序列有序。解析: 这道题的数据量很大,所以要找规律,最小的排序次数,就是这个序列的逆序数的个数,那么可以用树状数组求解。注意: 这题没说所有的序列是从1~n的所以要将所有的数字进行离散化。然后再求解。AC代码#include <cstdio>#include <cstring>#原创 2015-03-08 19:45:37 · 742 阅读 · 0 评论 -
HDU 4455 Substrings(dp+树状数组优化)
题意:给定一个序列ai,个数为n。再给出一系列w; 对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数解析:一直想不出来怎么转移,看了网络上面的题解才明白怎么做。 dp[i]dp[i]表示w=iw=i时所求的答案。 dp[1]=ndp[1]=n,这个很容易知道,dp[2]dp[2]中的子串就是删去dp[1]dp[1]中最后一个子串, 再令每个子串加上 其之后原创 2015-08-31 21:07:10 · 545 阅读 · 0 评论 -
ZOJ 3724 Delivery(树状数组+离线处理)
题意:N个点,对于每个点i,都有一条连向i+1的有向边,另外有M条其他的有向边(姑且称作小道边),有Q个询问(u,v)(u,v)求uu到vv的最短路。解析:这题真的是思考了好久,也参考了很多大牛的博客,终于把这题给过了。 这题让我理解到了,原来树状数组也可以维护最大值和最小值,真的是长见识了。以下解析,可能是这题网络上最详细的讲解了。刚一看感觉是最短路的题,但是再一想,有 n−1n-1 条有向边,原创 2015-09-08 21:03:44 · 539 阅读 · 0 评论 -
hdu 5465 Clarke and puzzle (二维树状数组+nim博弈)
解析: 利用二维树状数组来区间询问异或和,以及单点更新,然后利用nim博弈的结论判断胜负。mymy codecode#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int N = 505;int n, m, q;struct B原创 2015-09-22 18:30:26 · 813 阅读 · 0 评论