标签:
9
//先排序在二分 48ms
#include<cstdio> #include<algorithm> //#include<bits/stdc++.h> using namespace std; template<class T>inline T read(T&x) { char c; while((c=getchar())<=32)if(c==EOF)return 0; bool ok=false; if(c=='-')ok=true,c=getchar(); for(x=0; c>32; c=getchar()) x=x*10+c-'0'; if(ok)x=-x; return 1; } template<class T> inline T read_(T&x,T&y) { return read(x)&&read(y); } template<class T> inline T read__(T&x,T&y,T&z) { return read(x)&&read(y)&&read(z); } template<class T> inline void write(T x) { if(x<0)putchar('-'),x=-x; if(x<10)putchar(x+'0'); else write(x/10),putchar(x%10+'0'); } template<class T>inline void writeln(T x) { write(x); putchar('\n'); } //-------ZCC IO template------ const int maxn=1000011; const double inf=999999999; #define lson (rt<<1),L,M #define rson (rt<<1|1),M+1,R #define M ((L+R)>>1) #define For(i,t,n) for(int i=(t);i<(n);i++) typedef long long LL; typedef double DB; typedef pair<int,int> P; #define bug printf("---\n"); #define mod 10007 LL a[maxn]; int bs(int left,int right,int key) { while(left<=right) { int mid=(left+right)>>1; if(key==a[mid])return mid; else if(a[mid]>key) right=mid-1; else left=mid+1; } return -1; } int main() { //#ifndef ONLINE_JUDGE // freopen("in.txt","r",stdin); //#endif // ONLINE_JUDGE int n,m,i,j,k,t; while(read_(n,k)) { For(i,1,n+1) { read(a[i]); } sort(a+1,a+n+1); writeln(bs(1,n+1,k)); } return 0; }
//用二分的思想, 28ms #include<cstdio> #include<algorithm> //#include<bits/stdc++.h> using namespace std; template<class T>inline T read(T&x) { char c; while((c=getchar())<=32)if(c==EOF)return 0; bool ok=false; if(c=='-')ok=true,c=getchar(); for(x=0; c>32; c=getchar()) x=x*10+c-'0'; if(ok)x=-x; return 1; } template<class T> inline T read_(T&x,T&y) { return read(x)&&read(y); } template<class T> inline T read__(T&x,T&y,T&z) { return read(x)&&read(y)&&read(z); } template<class T> inline void write(T x) { if(x<0)putchar('-'),x=-x; if(x<10)putchar(x+'0'); else write(x/10),putchar(x%10+'0'); } template<class T>inline void writeln(T x) { write(x); putchar('\n'); } //-------ZCC IO template------ const int maxn=1000011; const double inf=999999999; #define lson (rt<<1),L,M #define rson (rt<<1|1),M+1,R #define M ((L+R)>>1) #define For(i,t,n) for(int i=(t);i<(n);i++) typedef long long LL; typedef double DB; typedef pair<int,int> P; #define bug printf("---\n"); #define mod 10007 LL a[maxn]; int bs(int left,int right,int key) { if(left>right) { if(a[left]==key)return left-1; else return -1; } int mid=a[left]; int low=left; int high=right; while(low<high) { while(low<high&&a[high]>=mid) high--; if(low<high)swap(a[high],a[low]); while(low<high&&a[low]<=mid) low++; if(low<high)swap(a[high],a[low]); } if(mid<key) return bs(low+1,right,key); else return bs(left,low-1,key); } int main() { //#ifndef ONLINE_JUDGE // freopen("in.txt","r",stdin); //#endif // ONLINE_JUDGE int n,m,i,j,k,t; while(read_(n,k)) { For(i,1,n+1) { read(a[i]); } writeln(bs(1,n+1,k)); } return 0; }
#1128 : 二分·二分查找 ( 两种方法 先排序在二分O(nlogN) + 直接二分+快排思想O(2N) )
标签:
原文地址:http://blog.csdn.net/u013167299/article/details/45014951