上一页 1 2 3 4 5 6 ··· 11 下一页
  2012年10月9日
摘要: 一个简单的线段树,憋了我好久。问题出在了存数据的数组开得不够,因为我建立线段树时要从D-1开始,但是D那一行的元素个数,可能会超过50000所以,存数据的数组要开的大一些。 1 #include<stdio.h> 2 #define INF 1000000000 3 4 int n, m,D,a[(50000+1000)<<1],treemin[51000<<2], treemax[51000<<2]; 5 6 void build() 7 { 8 for(int i = D-1; i > 0; i --) 9 {10 if(treemin 阅读全文
posted @ 2012-10-09 20:03 BFP 阅读(202) 评论(0) 推荐(0) 编辑
  2012年9月14日
摘要: 一个快排,水题。 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int n, a[11000]; 5 6 int cmp(const void *_p, const void *_q) 7 { 8 int *p = (int *)_p; 9 int *q = (int *)_q;10 return *p - *q;11 }12 13 int main()14 {15 while(~scanf("%d",&n))16 {17 for(int i = 0; i < n; i ++)18 ... 阅读全文
posted @ 2012-09-14 13:26 BFP 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 归并排序模版: 1 #include<stdio.h> 2 3 long long int ans, n; 4 long long int a[501000], b[501000]; 5 6 void mergesort(int start, int end) 7 { 8 if(start < end) 9 {10 int i, j, mid = (start+end)>>1;11 mergesort(start, mid);12 mergesort(mid+1, end);13 int t = start;1... 阅读全文
posted @ 2012-09-14 12:56 BFP 阅读(138) 评论(0) 推荐(0) 编辑
  2012年9月13日
摘要: ac了想了好久的题,真心高兴,虽然运行有点慢,但却是用c自己写的堆,代码很短;思路:维护两个堆,一个小顶堆用于存储所给数列最大的一部分,一个大顶堆用于存储所给数列剩下的最小一部分。运行过程:7 4 3 1 -4 2 8 -1000 2 1 2 6 6当输入1时,我们将3压入存储较大值的小顶堆中,判断存储较小值的大顶堆堆顶为NULL,则直接将3从小顶堆中取出,压入大顶堆,更新两个堆,输出大顶堆堆顶的值。当输入2时,我们将1压入存储较大值的小顶堆中,判断存储较小值的大顶堆堆顶为不为空,并且小顶堆的堆顶1<3,则我们将1和3互换,从而保证小顶堆始终存储较大的,大顶堆始终存储较小的。因为到了区间 阅读全文
posted @ 2012-09-13 17:21 BFP 阅读(365) 评论(0) 推荐(0) 编辑
  2012年9月10日
摘要: 用堆来实现优先队列:就本题来说即:1.建立最小堆 2.取堆顶元素a,更新最小堆 3.取堆顶元素b,更新最小堆 4.将c = a+b 插入最小堆,更新最小堆,并累加c(为所求) 5.重复步骤1,直到堆顶元素等于输入数据的和,即堆里仅有一个元素。注意:最后累加c所用的数据类型为long long型。 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 0x7fffffff 4 5 int n, D, sum, ... 阅读全文
posted @ 2012-09-10 13:34 BFP 阅读(141) 评论(1) 推荐(0) 编辑
  2012年9月3日
摘要: 1 #include<stdio.h> 2 #include<string.h> 3 4 int n, p, len, flag; 5 char a[10],s[10], sum[200], sum2[200]; 6 7 void solve() 8 { 9 memset(sum2,0,sizeof(sum2));10 len += 5;11 for(int i = 0; i < p; i ++)12 {13 int c = 0;14 for(int j = 0; j <= len; j ++)15 {16 ... 阅读全文
posted @ 2012-09-03 11:01 BFP 阅读(222) 评论(0) 推荐(0) 编辑
  2012年9月2日
摘要: 思路:找到当前所给延时最长的所包含的作业里面分数最大的完成它,eg:71 4 6 4 2 4 33 2 1 7 6 5 4当我在第7天的时候,没有延时 >=7 的,所以没有满嘴条件的,当在第6天的时候, 只可能完成一个作业就是1,完成它。第5天的时候可以完成延时为6的那个作业,但是第六天已经完成了,所以没有满足要求的,第四天的时候有四个满足要求的,一个延时为 6 三个延时为 4, 找到分数最大的以此类推即可: 1 #include<stdio.h> 2 #include<string.h> 3 4 int t, n, dl[1100], sc[1100]; 5 i 阅读全文
posted @ 2012-09-02 14:55 BFP 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 简单贪心,选择不相交区间: 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int n, s[25], e[25], r[25]; 5 6 int cmp(const void *_p, const void *_q) 7 { 8 int *p = (int *)_p; 9 int *q = (int *)_q;10 return e[*p]-e[*q];11 }12 13 int main()14 {15 while(scanf("%d",&n))16 {17 if(n == 0) brea... 阅读全文
posted @ 2012-09-02 14:02 BFP 阅读(240) 评论(0) 推荐(0) 编辑
  2012年8月25日
摘要: 模版题,线段树区间赋值,反转,看别人代码敲的; 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXD 132000 4 #define N 131070 5 int tree[4 * MAXD], rev[4 * MAXD], to[4 * MAXD], a[MAXD]; 6 void build(int cur, int x, int y) 7 { 8 int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1; 9 阅读全文
posted @ 2012-08-25 13:23 BFP 阅读(167) 评论(0) 推荐(0) 编辑
  2012年8月24日
摘要: 线段树+区间离散化:弄了好久,注意数组范围。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define MAXN 10000+100 5 6 int T, n, a[MAXN<<2], b[MAXN<<2], r[MAXN<<2], h[MAXN<<2], to[MAXN<<4]; 7 8 int cmp(const void *_p, const void *_q) 9 { 10 int *p = (int *) 阅读全文
posted @ 2012-08-24 14:08 BFP 阅读(130) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 11 下一页