树状数组
fyc_kabuto
一个蒟蒻程序员
展开
-
1831: [AHOI2008]逆序对
题目大意:在填充一列数,使逆序对数最小。有个结论,即当ia[j]时,将i,j调换一定更优。所以填进去的数一定是不下降的。然后树状数组一阵乱搞+dp就可以了。调试笔记:树状数组边界要清楚。code:#include#include#include#include#define LL long longusing namespace std;const int in原创 2017-07-19 13:17:52 · 318 阅读 · 0 评论 -
bzoj 1227: [SDOI2009]虔诚的墓主人
扫描线原创 2017-10-10 11:14:31 · 315 阅读 · 0 评论 -
bzoj 4361: isn
dp+树状数组+容斥原创 2017-12-18 21:35:34 · 322 阅读 · 0 评论 -
bzoj 2131: 免费的馅饼
dp+优化转载 2017-11-02 20:40:24 · 224 阅读 · 0 评论 -
bzoj 4765: 普通计算姬
分块好题原创 2017-10-11 19:57:29 · 305 阅读 · 0 评论 -
bzoj 3173: [Tjoi2013]最长上升子序列
好题原创 2017-10-19 20:18:30 · 323 阅读 · 0 评论 -
bzoj 1264: [AHOI2006]基因匹配Match
前言:我个大SB树状数组都写挂贡献两发wa被ozyD飞。题意:有特殊条件的最长公共子序列。题解:dp+树状数组。 直接暴力dp显然不行,所以要优化。 因为每个数都只有5个,所以可以存下来。 对于一个数,只有这些位置是有贡献的,那么树状数组维护最大值就好了。 code:#include<cstdio>#include<cstdlib>#include<iostream>#include<原创 2017-09-22 08:35:28 · 287 阅读 · 0 评论 -
bzoj 3192: [JLOI2013]删除物品
题解:因为只有两堆,所以方案数显然唯一。 可以将两队合并成一个数组,用树状数组维护,每次删一个点的代价就是最大值到次大值得距离。 一开始假装两堆中间有个无限大的数。 有点坑点,代码里有注释。 code:#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#include<cmath>#include原创 2017-09-18 10:26:13 · 344 阅读 · 0 评论 -
bzoj 4994: [Usaco2017 Feb]Why Did the Cow Cross the Road III
题意:给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai题解:大水题,记录下每个数的第一次出现位置,第一次访问时在其位置加一,第二次减回一,且求区间和,累加就是答案了。 树状数组维护下就好啦。 code:#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#de原创 2017-08-31 14:25:19 · 501 阅读 · 0 评论 -
bzoj 3529: [Sdoi2014]数表
orz:popoqqq此题比较强(起码我这个蒟蒻觉得) 主要是那个<=a的限制很烦。 经过测试,暴力求约数和函数是非常快的,于是可以离线+树状数组暴力维护前缀和做。 code:#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>us原创 2017-08-10 11:44:40 · 256 阅读 · 0 评论 -
bzoj 4240: 有趣的家庭菜园
题意:给出一个序列,问你最少交换多少次相邻的数,使这个序列变成单峰的。题解:这题其实不难,但想了很久,关键是要想到怎么贪。 考虑从小到达插入数,显然是向两边移,贪心取较小步数的是最优的大概意会下显然是对的那么可以树状数组为胡每个数当前位置。 注意相同的数要一起处理,wa了几发。总结:遇到这种序列题可以考虑按一定顺序插入。 code:#include<ma...原创 2018-03-14 22:05:20 · 226 阅读 · 0 评论