二分查找
煦--晨
菜鸟起飞
展开
-
hdu (2578) Dating with girls(1)
此题应注意的是;这n个数可能有相同的,所以把相同的留一个在这里,#include#includeint cmp(const void*a,const void*b){ return *(int*)a-*(int*)b;}int main(){ int m,n,i,j,k,h,low,hig,mid,p; int a[100005],b[原创 2013-08-22 16:45:39 · 555 阅读 · 0 评论 -
hdu(2141) Can you find it?
本题要用二分查找的方法来做;很好的一道二分+降维思想的题! 先把前两个数组加起来,存在map中在排序;然后二分查找t-c[i],看是否存在;; #include"stdio.h"#include"string.h"#include"stdlib.h"int a[600],b[600],c[600];int map[300000],n,m,k;int cm原创 2013-08-25 19:20:17 · 533 阅读 · 0 评论 -
hdu(1025)(最大单调递增序列)
题意很明确,就是求最大递增序列元素的个数,由于数很大一般的方法会超时;这时用二分查找或线段树的方法都可以,此时主要针对二分查找说明;此方法要用到两个数组,数组a的下标i是记录第几个元素(i=1,2,。。。n),a的值是此位置的数值。把输入的数都存进了数组a中。。二分查找,查的是数组b,找出数组b中第一个大于a[i]的值的位置k,此时改变数组b在k位置的值,b[k]=a[i];这样的原创 2013-10-31 14:47:22 · 692 阅读 · 0 评论 -
hdu1950
本题就是要求最大递增序列,用二分查找的方法,很容易解决。。 #include"stdio.h"int a[40006],b[40006];int find(int sum,int low,int high){ int mid; while(low { mid=(low+high)/2; if(sum>=b[mid]) low=mid+1;原创 2013-11-02 17:13:15 · 713 阅读 · 0 评论