摘要: 开始直接暴力,然后果断挂掉。T_T...后来看到DIcuss里有人说用Binary heap。然后就在想怎么用堆优化,想了半天没想到。然后看大牛的思路。鹈鹄灌顶啊!!!思路:先存数列长度的一半+1,然后建立小顶堆。然后输入剩下的元素,如果输入的元素大于堆顶元素,则把堆顶替换掉。再调整一次堆。My Code:#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int N = 125005;int heap[N];void heap_adjust(in 阅读全文
posted @ 2011-11-19 22:01 AC_Von 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 思路就是快排+二分查找。有重复的数字,多加了一点小处理。My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 70005;class node {public: int num; int ord;} a[N];bool cmp(node a, node b){ if(a.num == b.num) return a.ord < b.ord; return a.num 阅读全文
posted @ 2011-11-19 19:50 AC_Von 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 以前在poj做过,今天有做了下,TLE了。看了一下原来的代码,原来忘了输入的横坐标可能是0的情况了。做下笔记:int lowbit(int i) { return i&(-i);}void add(int i, int val) { //加元素 while(i <= N) { c[i] += val; i += lowbit(i); **i不能是0,否则死循环** }}int sum(int i) { //求和 int s = 0; while(i > 0) { s += c[i]; i -=... 阅读全文
posted @ 2011-11-19 12:58 AC_Von 阅读(252) 评论(0) 推荐(0) 编辑