
----数据结构----
acunstoppable
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
待写
线段树 区间合并CDOJ844 POJ3667HDU3308HDU1540原创 2018-01-28 22:50:06 · 206 阅读 · 0 评论 -
CF961E 数据结构 树状数组
题意: 给定一序列a1,…,an, 求(i,j)的对数,使得a[i]>=j, 且a[j]>=i(i < j)。 思路: 大致思路:i从1到n遍历,对于每个i,需要找出有多少个j符合上述的条件。用树状数组维护每个i的选取状态(0或1)。 对于每一个i, ①对于a[i]>=j,我们可以用getSum(a[i]),得到符合条件的j的个数; ②对于a[j]>=i,我们可以先按a[i]的值从小到大原创 2018-05-03 17:46:53 · 379 阅读 · 0 评论 -
HDU1394 线段树 单点更新 求逆序数
第一次写博客~~题意:给定n, 求0~n-1的数列逆序数。并且, 可以依次将头部元素插入尾部, 求由此生成的n-1个数列逆序数的最小值。 思路: 1. 求逆序数: 每插入一个元素, 查询在其之前出现过且比它大的元素数量, 并在线段树中更新。 2. 求最小值:每将a[i]由头部调到尾部, 逆序数减少a[i], 继而增加n-(a[i]+1)。 反思:思维局限, 逆序数不仅可以从前往后计算(即统计原创 2017-08-09 14:44:48 · 293 阅读 · 0 评论 -
HDU2795 线段树 单点更新 区间最大值
题意:有h*w的告示板, 每张通知的规格为1*wi, 通知张贴的位置优先选最上端的位置, 其次选最左的位置, 求每张通知张贴在第几行? 思路:记录每一行所剩长度, 运用线段树维护区间最大值。左子树值大于wi, 则查询左子树, 否则查询右子树。 反思: 1. 思维不够缜密: 刚开始的想法和正解是相同的, 但考虑到h的范围为1e9, 继而否定了自己的想法。 然而忽略了(所需要用到的)h <= n原创 2017-08-09 17:30:25 · 237 阅读 · 0 评论 -
POJ2828 线段树 单点更新
题意:将vi依次插入pi+1位置上, 求最后形成的队列。 思路: 1、逆序插入, 因最后插入的必定能得到想要的位置; 2、线段树节点存储对应区间所余空位, 每插入一个vi, 对应区间空位便减一; 3、可以理解成:将每一次插入视为所余空位的最后一次插入。 反思:没能想出“将每一次插入视为所余空位的最后一次插入”这一正确思路。#include <iostream>using namespac原创 2017-08-10 20:59:01 · 262 阅读 · 0 评论 -
POJ2528 线段树 区间更新 离散化
题意:依次将给定区间染色并覆盖之前的颜色, 问最后能看见几种颜色? 思路: 1、首先li <= ri <= 1e7, 若直接建树则必定MLE \ TLE,此时便需要用到离散化处理,也是我新学到的知识。 下面是我学习离散化处理的两个网址: http://www.matrix67.com/blog/archives/108 http://blog.youkuaiyun.com/gokou_ruri/arti原创 2017-08-11 19:16:27 · 243 阅读 · 0 评论 -
POJ3468 线段树 区间更新
题意:区间更新及求和。 思路:模板题。#include <iostream>#include <cstring>using namespace std;typedef long long ll;const int MAXN = 100000 + 10;ll arr[MAXN], sum[MAXN << 2], add[MAXN << 2];void PushUp(int rt){原创 2017-08-11 10:56:07 · 304 阅读 · 1 评论 -
HDU1698 线段树 区间更新
题意:区间更新及求和。 思路:模板题。#include <iostream>#include <cstring>using namespace std;const int MAXN = 100000 + 10;int sum[MAXN << 2], add[MAXN << 2];void PushUp(int rt){ sum[rt] = sum[rt << 1] + sum[原创 2017-08-11 10:25:25 · 260 阅读 · 0 评论 -
POJ2991 线段树 区间更新 计算几何
题意:吊车由n条不同长度的线段组成,每条线段首尾相接。初始状态:每条线段垂直与x轴。每次操作改变第s条和(s+1)条的逆时针角度为a,询问每次操作后第n段末尾的坐标。 思路: 1、将每段线段都视为向量,则每次询问的结果实质上是向量和。 2、每次改变第s段和第(s+1)段的相对角度,实际上是改变了从第(s+1)段至第n段的绝对角度,则可以通过线段树进行区间更新。然而,题目给定的是第s段和第(s+原创 2017-08-14 15:33:38 · 268 阅读 · 0 评论 -
HDU1671 字典树
题意:问给定字符串集合中是否存在某个字符串是另一个字符串的前缀情况。 思路:模板题 反思:一定要看清楚输出的格式、大写小写!#include <iostream>#include <cstring>using namespace std;const int MAXN = 10;struct Trie{ int v; Trie* next[MAXN];};Trie*原创 2017-08-14 19:34:51 · 165 阅读 · 0 评论 -
POJ2001 字典树
题意:给定字符串集合,求每个串最短的能区别于其他字符串的前缀,如“carbohydrate”能缩短成“carboh”,但不能缩短成“carbo“,因为集合中有别的串也有相同前缀。 思路:模板题 反思:套用模板要小心,情况不同时某些细节也要因此调整,万不可大意。#include <iostream>#include <cstring>#include <cstdio>using namesp原创 2017-08-14 21:07:29 · 160 阅读 · 0 评论 -
HDU3294 manacher
题意:将字符串按一定规则变换,输出变换后的字符串中的最长回文串的起始和终止位置,并输出回文串。 题意:manacher模板题#include <iostream>#include <cstring>using namespace std;const int MAXN = 200000 + 10;char c, s[MAXN * 2];int p[MAXN * 2];int st, t,原创 2017-08-15 21:14:43 · 188 阅读 · 0 评论 -
CF25E 字符串哈希/KMP
题意: 给定三个串,求包含这三个串的总串的最小长度。 思路: 字符串哈希。 当然,也可以用KMP,然而我自己没有想到,看来对KMP的理解仍然不够深。 这里也引用一下其他博主的KMP做法。 http://blog.youkuaiyun.com/u011345136/article/details/38400395 实现:#include <bits/stdc++.h>using namespace原创 2017-08-27 14:26:03 · 742 阅读 · 0 评论 -
动态规划 FZU2236 树状数组优化
题意: 这题是求一个数列中严格递增子序列的个数。比如数列(1,3,2)的严格递增子序列有(1)、(3)、(2)、(1,3)、(1,2),共5个。长得一样的但是位置不同的算不同的子序列,比如数列(3,3)的答案是2。 思路: 1、类LIS问题: dp[i] = sigmadp[j] + 1(j < i && a[j] < a[i]) 2、离散化 + 树状数组 反思: 代码:#include原创 2018-05-03 23:37:12 · 253 阅读 · 0 评论