数据结构
zhengdd1
There is nothing sadder than a dream delays until it fades forever
展开
-
noi2010超级钢琴
优先队列+st#include<iostream>#include<cstdio>#include<queue>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int INF=1E9;const int maxn=5e5+10;int n,k,minlen,maxlen原创 2016-05-11 13:27:17 · 408 阅读 · 0 评论 -
POJ3469
线段树解法: 本题需要成段更新区间,所以 为了保护线段树的高效,对每个节点,我们维护一下两个数据。a.给这个节点对应的区间内的所有原始共同加上的值。 b.在这个节点对应的区间中除去a之外其他的值的和。通过单独维护共同加上的值,给区间同时加上一个值的操作就可以高效的进行了。如果对于父亲节点同时加上一个值,那么这个值就不会在儿子节点被重复考虑。#include<iostream>#include<原创 2016-05-30 11:52:48 · 317 阅读 · 0 评论 -
NYOJ一笔画
题目来源一笔画问题时间限制:3000 ms | 内存限制:65535 KB难度:4描述zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。规定,所有的边都只能画一次,不能重复画。输入第一行只有一个正整数N(N<=10)表示测试数据的组数。每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中原创 2016-08-31 19:53:47 · 496 阅读 · 0 评论 -
数组模拟队列
队列插入删除操作数组模拟#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 100000 + 10;int l[maxn];int r[maxn];///l[i]表示i的前驱,r[i]表示i的后继。int head = 0;void solve(){ int n;原创 2016-11-29 13:43:39 · 859 阅读 · 0 评论 -
st表求最值
题目大意:给定一个n,q,代表n个数字和q个询问,每次询问,求出给定区间内的最大值和最小值的差值。我们可以根据st表来做, st表是有点类似动态规划f(i,j)表示从i开始的长度为2^j区间内的最值, 我们可以得到f[i][j] = max(f[i][j-1],f[i+2^(j-1)][j-1]) 1<=j<=mn[n] mn代表每次取对数保存的值 1<=i<=n-2^(j-1) +1 ac原创 2017-04-26 17:33:50 · 490 阅读 · 0 评论 -
浅谈堆以及java优先队列的详细使用
最近在学习集合框架整理下感觉有用的东西。我们知道优先队列其实内部实现就是一个堆的数据结构,java默认的是一个小跟堆,每次取出最小的元素,因为堆的性质他可以做到O(logn)级别的插入和删除操作。我们知道堆的性质是有: 1.堆中某个结点的值总是不大于(或不小于)其父结点的值; 2.堆总是一棵完全二叉树。将根结点最大的堆叫做大根堆,根结点最小的堆叫做小根堆。常见的堆有二叉堆、斐波那契堆等插入:向堆原创 2017-05-19 08:40:30 · 11379 阅读 · 0 评论