题目:http://codeforces.com/contest/706/problem/B
题意:找数列中小于某个数的数有多少个
解答:二分。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100000 + 10;
int a[maxn];
int h[maxn];
int l[maxn];
int n,ans;
int bsearch(int tmp)
{
int l = 0,r = n-1;
int mid;
int ok = 1;
int x;
while(l <= r)
{
mid = (l + r)/2;
if(tmp < a[mid])//tmp±ÈËüС
{
r = mid-1;
ok = 1;
}
else if(tmp > a[mid])
{
l = mid + 1;
ok = 2;
}
else if(tmp == a[mid])
{
ok = 0;
x = mid;
break;
}
}
if(ok == 1)
return mid;
else if(ok == 2)
return mid+1;
else if(ok == 0)
return x+1;
}
int main()
{
int m;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&a[i]);
h[a[i]]++;
}
sort(a,a+n);
for(int i = 0;i < n;i++)
l[a[i]] = i;
scanf("%d",&m);
while(m--)
{
int tmp;
scanf("%d",&tmp);
if(tmp >= 100000)
printf("%d\n",n);
else
{
if(tmp < a[0])
ans = 0;
else if(tmp > a[n-1])
ans = n;
else
{
if(h[tmp]==0)
ans = bsearch(tmp);
else
{
ans = l[tmp]+1;
}
}
printf("%d\n",ans);
}
}
return 0;
}