I got a problem from UVA online judge Problem link. I have read it tons of times and as they said, I have to get the answer really fast.
I have used a binary search and STD::Sort, but I am still having time error. I don't know any faster way to search on an array than binary search.
Any feedback please?
PS:I am not an english speaker, sorry for my english.
#include <stdio.h>
#include <string>
#include <algorithm>
int n,q,vec[100000];
int inicio,final,medio,busca;
int cont;
int busquedabinaria()
{
//busqueda binaria
std::sort(vec,vec+n);
inicio=0;
final=n-1;
medio=(inicio+final)/2;
while(inicio<=final)
{
if(vec[inicio]==busca)
return inicio;
if(vec[medio]==busca)
return medio;
if(vec[final]==busca)
return final;
medio = (inicio + final) / 2;
if (vec[medio] > busca)
final = medio - 1;
else if (vec[medio] < busca)
inicio = medio + 1;
// found
}
return -1;
}
int main()
{
freopen("in.txt", "rt",stdin);
freopen("out.txt", "wt",stdout);
while (scanf("%d %d\n",&n,&q)!=EOF && (n!=0 || q!=0) )
{
for (int i=0;i<n;i++)
{
scanf("%d\n",&vec[i]);
}
printf("CASE# %d:\n",cont+1);
cont++;
while(q--)
{
scanf("%d\n",&busca);
int res=busquedabinaria();
if(res!=-1)
{
while (vec[res-1]==busca && res>0)
{
res--;
}
printf("%d found at %d\n",busca,res+1);
}
else
printf("%d not found\n",busca);
}
}
return 0;
}
1 9999999this technique will be infinitely quicker than a brute force approach. – Loki Astari Oct 1 '12 at 15:58