
数据结构优化算法
DieOrThink
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表
hdu 1216 Assistance Require 主要是为了学习链表才做这题。 利用了链表这个数据结构,因为数组的删除需要大量的移位,对这题而言是必定超时的。 #include #include #include using namespace std; int temp[3010]; struct node { int val; node *next;原创 2013-07-10 13:53:55 · 563 阅读 · 0 评论 -
hdu 2795 Billboard 线段树 单点更新
#include #include #include using namespace std; const int N =200005; int maxn[N<<2]; int h,w; void build(int l,int r,int rt){ if(l==r){ maxn[rt]=w; return; } int mid=(l+r)>>1; build(l,mid,rt<<原创 2014-04-04 15:57:34 · 479 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number 逆序数 线段树&归并排序
#include #include #include using namespace std; #define N 5005 int a[N]; int sum[N<<2]; void build(int l,int r,int rt){ if(l==r){ sum[rt]=0; return; } int mid=(l+r)>>1;原创 2014-04-01 23:38:43 · 494 阅读 · 0 评论 -
hdu 2665 Kth number 区间第K大值 划分树
#include #include #include using namespace std; const int N =100015; int tree[30][N]; int a[N]; int cnt[30][N]; void build(int l,int r,int dep){ if(l==r) return; int mid=(l+r)>>1; int num=原创 2014-04-02 21:37:06 · 686 阅读 · 0 评论 -
hdu 1754 I Hate It 线段树 单点更新
#include #include #include using namespace std; #define N 200001 int maxn[N<<2]; int x; void build(int l,int r,int rt){ if(l==r){ scanf("%d",&x); maxn[rt]=x; return; } int mid=(l+r)>>1; buil原创 2014-04-01 09:47:54 · 473 阅读 · 0 评论 -
hdu 1698 Just a Hook 线段树 成段更新
#include #include #include using namespace std; const int N =100005; int sum[N<<2]; int type[N<<2]; void PushUp(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void PushDown(int rt,int l){ if(type[rt]原创 2014-03-30 01:06:11 · 538 阅读 · 0 评论 -
hdu 1166 敌兵布阵 线段树 单点更新
#include #include #include using namespace std; const int N =50005; int sum[N<<2]; int a[N]; void build(int l,int r,int rt){ if(l==r){ sum[rt]=a[l]; return; } int mid=(l+r)>>1; build(l,mid,rt<原创 2014-03-29 23:06:27 · 498 阅读 · 0 评论 -
hdu 2473 Junk-Mail Filter 并查集删除
#include #include #include #include using namespace std; const int N=1000005; int set[N]; int a[N]; bool vis[N]; int find(int x){ int r=x; while(r!=set[r]){ r=set[r]; } int temp=x; while(x!=r){原创 2014-03-27 18:47:06 · 557 阅读 · 0 评论 -
hdu 2818 Building Block 并查集 路径压缩
#include #include #include using namespace std; #define N 30005 int set[N]; int num[N]; int cnt[N]; int find(int x){ if(set[x]==x) return x; int temp=set[x]; set[x]=find(set[x]);//路径压缩,不进行路径压缩果断的超原创 2014-03-14 20:20:00 · 533 阅读 · 0 评论 -
Tyvj 1034 尼克的任务 DP+邻接表
#include #include #include using namespace std; #define inf 0x7f7f7f7f #define N 10010 struct node{ int v; node *next; }; struct vertexNode{ node *head; }g[N]; struct type{ int st,c原创 2014-01-19 22:57:19 · 813 阅读 · 0 评论 -
hdu_4006 The kth great number 优先队列
#include #include #include #include #include using namespace std; struct node{ int pos; bool operator<(node st) const{ return st.pos<pos; } }; priority_queue p; int main(){ int n,k; while(scanf原创 2013-09-08 01:43:36 · 549 阅读 · 0 评论 -
hash表
哈希表(散列表)的基本原理: 使用一个下标范围比较大的数组来存储元素,一般通过设计一个函数(哈希函数,即散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,然后用该数组单元来存储对应元素。 1,整数hash 例题: hdu 1425 sort 排序可能会超时 在输入的过程中排好序,最大复杂度2*1000000 #include #include #incl原创 2013-07-11 17:19:08 · 528 阅读 · 0 评论 -
poj 2828 Buy Tickets 线段树 单点更新
#include #include #include using namespace std; const int N =200005; int maxn[N<<2]; struct node{ int id; int val; }s[N]; int a[N]; void build(int l,int r,int rt){ if(l==r){ maxn[rt]=1; return;原创 2014-04-05 18:37:03 · 529 阅读 · 0 评论