随笔分类 -  HDU

hdu 1003 Max Sum
摘要:求最大子序列问题,有很多种方法,这里先实现一种,注意: 1、以负数开始的情况 阅读全文
posted @ 2017-04-14 15:39 BFP 阅读(121) 评论(0) 推荐(0)
hdu 2795 Billboard
摘要:随着对线段树的认识,我的重点放在了,这个线段树里每个元素所代表的意义上了。这道题我们把每一层看作一个空间,随着往里面放广告,空间越来越小,而线段树所标示的意义就是剩余空间,通过像二分一样的去查找,将时间按复杂度降下来。 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 220000 4 5 int h, w, n, D, tree[MAXN<<2]; 6 int max(int a, int b) 7 { 8 if(a > b) return a; 9 else return b;10 }1 阅读全文
posted @ 2012-08-21 23:05 BFP 阅读(148) 评论(0) 推荐(0)
hdu 1394 Minimum Inversion Number
摘要:这道题一开始看题,没有什么思路,也是学习线段树以来第一次接触这样的题,后来通过查找资料了解到,这是线段树一个求逆序对的应用,通过学习这方面的知识,总结出可以将它转化为求区间和或者是求区间内1的个数这样一个基本的形式。这道题我们可以这样想,求逆序对也就是找后面的点比当前点小的这些点的个数的总和,另外我们也可以反过来找前面的点比当前点大的这些点的个数的总和。我用的后面的思路,可能会简单一些吧,每当输入一个值的时候,query一下,找到前面输入的比他大的点的总数,然后将此值赋值为1,updata一下。 1 #include<stdio.h> 2 #include<string.h& 阅读全文
posted @ 2012-08-21 17:22 BFP 阅读(172) 评论(0) 推荐(0)
hdu 1754 I Hate It
摘要:线段树基础题: 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 0x7fffffff 4 #define MAXN 800000 5 int N, M, D, tree[MAXN]; 6 7 int max(int a, int b) 8 { 9 if(a>b) return a;10 else return b;11 }12 13 void updata(int cur)14 {15 for(int i = (D+cur>>1); i^1; i >>= 1)16 tree[i] 阅读全文
posted @ 2012-08-21 09:49 BFP 阅读(165) 评论(0) 推荐(0)
hdu 1166 敌兵布阵
摘要:线段树基础题: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 200000+100 4 5 int T, N, D, tree[MAXN], num; 6 char s[10]; 7 8 void updata(int cur, int j) 9 {10 for(int i = D+cur; i^1; i >>= 1)11 tree[i] += j;12 }13 14 int query(int x, int y)15 {16 int i = D+x-1, j = D+y+1,ans = 0; 阅读全文
posted @ 2012-08-20 17:14 BFP 阅读(157) 评论(0) 推荐(0)