poj2010解题报告(堆)
2015-07-27 01:01
260 查看
#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; class tri { public: int first; int second; int third; bool operator < (const tri temp)const { return first<temp.first; } }; bool cmp_p(const tri temp1,const tri temp2) { return temp1.second<temp2.second; } bool cmp(const tri temp1,const tri temp2) { return temp1.second<temp2.second; } int n,c,f,sum_left=0,sum_right=0; bool In_Min_List[110000],Out_Of_List[110000]; tri cow[110000],List[110000]; int main() { int i,j,m; scanf("%d%d%d",&n,&c,&f); for(i=1;i<=c;++i) { scanf("%d%d",&cow[i].first,&cow[i].second); } sort(cow+1,cow+c+1); for(i=1;i<=c;++i) { cow[i].third=i; } m=n>>1; j=m; memcpy(List,cow,sizeof(cow)); sort(List+1,List+c-m,cmp_p); for(i=1;i<=m;++i) { In_Min_List[List[i].third]=true; sum_left+=List[i].second; } sort(List+c-m+1,List+c+1,cmp_p); for(i=c-m+1;i<=c;++i) { sum_right+=List[i].second; } make_heap(List+c-m+1,List+c+1,cmp); for(i=c-m;i>=m+1;--i) { if(sum_left+sum_right+cow[i].second<=f) { printf("%d\n",cow[i].first); goto End; } if(In_Min_List[i-1]) { sum_left-=cow[i-1].second; Out_Of_List[i-1]=true; while(Out_Of_List[List[++j].third]); sum_left+=cow[List[j].third].second; In_Min_List[List[j].third]=true; } else { Out_Of_List[i-1]=true; } if(cow[i].second<List[c-m+1].second) { sum_right-=List[c-m+1].second-cow[i].second; pop_heap(List+c-m+1,List+c+1,cmp); List[c]=cow[i]; push_heap(List+c-m+1,List+c+1,cmp); } } printf("-1\n"); End: return 0; }
相关文章推荐
- POJ-2010-优先队列(解题报告)
- 二叉堆例题解题报告代码--poj3253、poj2442、poj2010、poj3481
- 二叉堆模板小结-附上解题报告poj3253、poj2442、poj2010、poj3481
- poj1326解题报告
- POJ-2387-Til the Cows Come Home 解题报告
- 解题报告:POJ 2965 The Pilots Brothers' refrigerator 两种做法
- POJ - 2481 Cows解题报告(树状数组 相同点重复计数处理)
- POJ-1002-487-3279-解题报告
- POJ 1201 解题报告
- poj1611解题报告
- POJ - 3026 Borg Maze解题报告(Kruskal+Bfs)
- POJ 1019 解题报告
- POJ - 3264 Balanced Lineup解题报告(RMQ问题 ST算法 魔板题)
- POJ 3630 解题报告
- POJ 1003解题报告
- 水题解题报告01---校门外的树(POJ原2808)
- poj解题报告——1082
- POJ 1094 解题报告
- POJ 1331解题报告,确定进制。PS: 我刚才发的怎么没了?
- POJ-3087 Shuffle'm Up 解题报告(陈小宾)