———————数据结构———————
文章平均质量分 60
CoderCat.
大
展开
-
一维st表-poj3264
区间最值问题,倍增+动态规划的思想适用于不更新节点且询问次数多#include <cstdio> #include <cmath> #include <algorithm> using namespace std; int maxn[50001][30], minn[50001][30];//i为起点,(1 << j)为区间长度 void in...原创 2018-03-30 17:21:03 · 146 阅读 · 0 评论 -
(水题)并查集求连通块hdu1198
#include <cstdio> #include <cstring> using namespace std; bool grad[11][4] = {{1,1,0,0}, {1,0,0,1}, {0,1,1,0}, {0,0,1,1},//i = 0表示上,顺时针编号;j = 1表示连通 {1,0,1,0}, {0,1,0...原创 2018-04-02 22:13:18 · 188 阅读 · 0 评论 -
CodeForces 797C Minimal string
题目大意:给定一段字符串,用栈做容器,确定字符的入栈和出栈顺序,将字符串变为字典序最小并输出 算法: (1) 遍历字符串,直到栈为空,将栈中小于当前字符的字符全部出栈。再将当前字符压栈。 (2) 若遍历完,栈不为空,将栈中字符全部出栈 启示:能压栈的尽量压,每次枚举满足条件的能出栈尽量出栈 #include &lt;cstdio&gt; #include &lt;stack&gt; ...原创 2018-07-26 21:47:10 · 185 阅读 · 0 评论 -
【模板】zoj2859_二维st表
#include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cmath&gt; using namespace std; int stmin[301][301][9][9]; int n;//n行n列 int q; void init_st(int n) { int i, j, k1, k2; for(k1...原创 2018-05-13 23:07:15 · 402 阅读 · 0 评论 -
线段树单点替换更新hdu1754
学习自https://blog.csdn.net/metalseed/article/details/8039326#t3#include <cstdio> #include <algorithm> using namespace std; const int maxn = 200010; int maxtr[maxn<<2]; void build(int l...原创 2018-03-30 21:47:43 · 97 阅读 · 0 评论 -
线段树poj2528_hash表(一种题型或者模型)+离散化处理
一、hash表 hash表给线段树的某段线段加上一个状态,并且该状态可以被新状态覆盖 二、原创 2018-04-06 16:13:02 · 186 阅读 · 0 评论 -
线段树poj3468_区间增减更新
#include #include using namespace std; typedef long long LL; const int maxn = 100010; LL sumtr[maxn LL add[maxn void build(int l, int r, int rt); void pushup(int rt); LL原创 2018-04-05 16:51:43 · 103 阅读 · 0 评论 -
线段树hdu1698区间更新模板题
区间更新需要用到延迟标记即每次更新时,不需要更新到底,当搜索的区间在更新或者询问的区间内,就更新该区间并且加上延迟标记然后返回;当下次更新或者询问时,先pushdown(按照延迟标记更新子树),然后再搜索左右子树#include <cstdio>using namespace std;const int maxn = 100010;int mark[maxn<<2];int...原创 2018-04-04 22:13:23 · 135 阅读 · 0 评论 -
线段树hdu2795-在query同时更新
#include #include using namespace std; const int maxn = 200010; int tree[maxn int h, w, n; void build(int l, int r, int rt); int query(int x, int l, int r, int rt); void pushup(int rt); int原创 2018-04-03 22:43:14 · 89 阅读 · 0 评论 -
线段树求逆序对hdu1394
#include <cstdio>#include <algorithm>using namespace std;const int maxn = 5010;int a[maxn];int tree[maxn<<2];//表示该区间已经插入的数的个数void build(int l, int r, int rt);int query(int L, int R...原创 2018-03-31 10:53:08 · 325 阅读 · 4 评论 -
线段树单点更新hdu1166
学习自https://blog.csdn.net/metalseed/article/details/8039326#t3先序建子树,然后回溯建立父节点 更新时先递归更新子节点,然后再回溯更新父节点 回溯思想很重要#include <cstdio> using namespace std; const int maxn = 50005; int sum[maxn<<2]; ...原创 2018-03-30 20:38:45 · 105 阅读 · 0 评论 -
CodeForces - 722C_Destroying Array 并查集应用
题目大意:给定数组大小n,再给定数组元素(从1~n编号),最后给定数组元素的删除顺序,求执行完每一次删除操作后,数组的最大连续子段和。 倒着处理,并查集。 (1)初始化数组为空,倒着加入元素。 (2)每一次加入元素,如果其左右两边也加入过了,就与左或者右边并在一起得到新的数值。当前答案来源于上一次的答案或者本次更新的数值,将两者取最大值即可。 //并查集,倒着处理 #include &...原创 2018-08-05 12:17:44 · 136 阅读 · 0 评论