2013年7月28日

SPOJ - POSTERS(离散+暴力or离散+线段树)【待完善】

摘要: 1、离散+暴力的方法是最容易想到的。思路:点坐标10^7的范围,使得最容易的暴力无法实现。但坐标的个数最多有2*n个,(n=40000),这样看的话,点的分布就过于分散了,所有我们要找个方法来把点坐标集中起来。而离散化就是能很好的实现这个思路,离散化了以后,n是10^4的规模,那么我们再次使用暴力的话,就能擦边的过掉这道题了。代码如下:#include #include #include using namespace std; #define M 40005 int a[M][2], s[M+M], ss[M+M], f[10000007], flag[M]; int main() {... 阅读全文
posted @ 2013-07-28 19:07 Primo... 阅读(140) 评论(0) 推荐(0) 编辑

poj2352 - Stars(树状数组)

摘要: 题意:给定每个星星(x,y)的坐标求该满足条件(x' #include using namespace std; #define M 15005 #define lowbit(x) -x&x struct Node{ int v, x; }; Node a[M]; int n, c[M], r[M], ans[M]; int comp(const Node p, const Node q) { return p.v==q.v?p.x0) { ret+=c[x]; x-=lowbit(x); } return ret; } int... 阅读全文
posted @ 2013-07-28 17:03 Primo... 阅读(122) 评论(0) 推荐(0) 编辑

poj2299 - Ultra-QuickSort (求逆序数)

摘要: 题意:给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。我们需要知道:逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数所以我们需要求数列的逆序数,O(N*N)的算法肯定会超时的,所有我们寻求较为高效的排序方法,归并排序就是充分利用分治法的而提高效率的排序方法。归并排序:#include #define M 500005 int n , s[M]; long long ans; void move(int l, int mid, int r) { int len = r-l+1; int *a = new int[le... 阅读全文
posted @ 2013-07-28 15:14 Primo... 阅读(159) 评论(0) 推荐(0) 编辑