Pagini recente » Cod sursa (job #2979989) | Cod sursa (job #2683467) | Cod sursa (job #528854) | Cod sursa (job #2744941) | Cod sursa (job #528877)
Cod sursa(job #528877)
#include<iostream.h>
#include<fstream.h>
struct intrebare{int a,x;};
int a[100001];
int cautab1(int st,int dr,int x)
{int 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;}
/////////////////////////////
int cautab2(int st,int dr,int x)
{int 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;}
//////////////////////////
int cautab3(int st,int dr,int x)
{int 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()
{int 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;}