数据结构
sheng4204
这个作者很懒,什么都没留下…
展开
-
腾讯笔试题-分治+线段树
题目:有n块木板,第i块木板的长度是ai,然后要对这些木块刷漆,一次可以刷连续的一行,或者一列,输入一个n和n个木板的长度,比如:n最大不超过500052 2 2 1 2//木板分布*** ******输出:3可以先刷下面一行,然后刷上面一行的左边3个,再刷右边一个大体思路:大体来说就是一个分治的思路,找到区间的最小值,然后刷最下面的部分,对于上面的部分再分开刷,当然,可能会有竖着刷效率更好的情况,这种情况就要竖着刷。这个过程涉及到一个动态查询区间最小值的问题,5000原创 2020-08-23 23:06:53 · 281 阅读 · 0 评论 -
POJ-3468 A Simple Problem with Integers 线段树
线段树区间修改,先用线段树求出每个区间的总和d,对于每次修改,路径上的节点修改总和值d,整个区间都要修改的节点修改加数s,查询的时候解就是区间和加上路径节点(包括表示区间的节点)所有的s*区间长度。#include #include #include using namespace std;typedef long long ll;struct node { int b, e原创 2016-05-11 16:56:27 · 374 阅读 · 0 评论 -
HDU-1394 Minimum Inversion Number 树状数组
给出一个0到n-1的全排列,可以将第一个数字移动到最后一个,求通过任意次数移动以后最小的逆序对数。用树状数组求出初始状态的逆序对数,然后循环更新。#include #include #include using namespace std;int c[5002];int d[5002];int n;int update(int u) { while(u <= n) {原创 2016-05-07 17:20:01 · 294 阅读 · 0 评论 -
HDU-3689 Let the light guide us 线段树+DP
题意:输入n,m,然后两个n*m的矩阵,第一个代表在这个位置建塔的成本,第二个代表在相应位置建塔能照的距离,要求每行建一个,并且相邻两行的两个塔要满足照的距离之和大于等于列号差。求最小成本。分析:每一行中建立一个塔后会在这行照亮一段距离,如果下一行中的一个点能照到这段区间,表示这两个是可以同时建的。也就是下一行中的一个点要在这一行中的对应区间找一个成本最小值,动态规划的状态传递比较好写,只是一原创 2016-08-04 20:51:32 · 344 阅读 · 0 评论 -
uvalive 6609 - Minimal Subarray Length(离散化+树状数组)
题意:给出n个数,求加和大于x的最短区间的区间长度。如果前i个数字和为y,那么如果前j数字的和小于等于y-x,那么i-j就是一种可能的情况,我们对于所有的i找出前面最大的j就可以了,因为数据量比较大,用树状数组来处理前n项的最大值,但是每个数字又可能比较大,所以先离散化处理一下。#include #include #include #include #include using原创 2016-08-25 21:02:55 · 401 阅读 · 0 评论 -
hdu 5877 - Weak Pair (2016大连网络赛) 离散化 + 树状数组
题意:给出一棵树,n个节点,每个节点有一个权值,输入一个k,问有多少对点,满足点的权值乘积小于等于k,并且其中一个点是另一个点的祖先节点。对于每一个节点,如果这个节点的权值为a,那么找到子节点所有的权值小于等于k/a的节点数量就是满足条件的对数(a=0时就是所有子节点都满足条件)。通过树状数组对统计做一个时间优化,用dfs处理,当处理到一个节点的时候,先减去树状数组中已经有的满足条件的数量,然原创 2016-09-20 22:30:34 · 353 阅读 · 0 评论