Pagini recente » Istoria paginii runda/mirror/clasament | Istoria paginii utilizator/bileca_alexandru_9e | Diferente pentru monthly-2012/runda-9/solutii intre reviziile 28 si 22 | Profil BBchang | Cod sursa (job #528858)
Cod sursa(job #528858)
#include<iostream.h>
#include<fstream.h>
struct intrebare{int a,x;};
long long a[100001];
long long cautab1(long long st,long long dr,long long x)
{long long mij,g=0,i,z;
z=dr;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]==x)
{g=1;
break;}
if(a[mij]<x)
st=mij+1;
if(a[mij]>x)
dr=mij-1;
}
if(g==1)
return mij;
else
return -1;}
/////////////////////////////
long long cautab2(long long st,long long dr,long long x)
{long long mij,g=0,i,z;
z=dr;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]<=x)
{g=1;
break;}
if(a[mij]>x)
dr=mij-1;
}
if(g==1)
return mij;
else
return -1;}
//////////////////////////
long long cautab3(long long st,long long dr,long long x)
{long long mij,g=0,i;
while(st<=dr)
{mij=(st+dr)/2;
if(a[mij]>=x)
{g=1;
break;}
if(a[mij]<x)
st=mij+1;
}
if(g==1)
return mij;
else
return -1;}
/////////////////////
int main()
{long long m,i,n,z,y,j;
intrebare b[100001];
ifstream f("cautbin.in");
ofstream h("cautbin.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
f>>m;
for(j=1;j<=m;j++)
{f>>b[j].a>>b[j].x;
if(b[j].a==0)
{y=cautab1(1,n,b[j].x);
for(i=y;i<=n;i++)
if(a[i]!=a[y])
{h<<i-1<<endl;
break;}
}
if(b[j].a==1)
{y=cautab2(1,n,b[j].x);
for(i=y;i<=n;i++)
if(a[i]>b[j].x)
{h<<i-1<<endl;
break;}
}
if(b[j].a==2)
{y=cautab3(1,n,b[j].x);
for(i=y;i>=1;i=i-1)
if(a[i]<b[j].x)
{h<<i+1<<endl;
break;}
}
}
return 0;}