Pagini recente » Cod sursa (job #2418748) | Cod sursa (job #202760) | Cod sursa (job #225521) | Cod sursa (job #2275266)
#include <fstream>
using namespace std;
int N, M, v[100003];
int cautPozMax(int x)
{
int st=1, dr=N, mij = (st+dr)/2;
while (st<=dr)
{
mij = (st+dr)/2;
if (v[mij]==x)
{
while (v[mij]==x) mij++;
return mij-1;
}
else if (x<v[mij]) dr=mij-1;
else st = mij+1;
}
return -1;
}
int cautPozMax2(int x)
{
int st=1, dr=N, mij = (st+dr)/2;
while (st<=dr)
{
mij = (st+dr)/2;
if (v[mij]==x)
{
while (v[mij]==x) mij++;
return mij-1;
}
else if (x<v[mij]) dr=mij-1;
else st = mij+1;
}
return -1;
}
int cautPozMin(int x)
{
int st=1, dr=N, mij = (st+dr)/2;
while (st<=dr)
{
mij = (st+dr)/2;
if (v[mij]==x)
{
while (v[mij]==x) mij--;
return mij+1;
}
else if (x<v[mij]) dr=mij-1;
else st = mij+1;
}
return -1;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin>>N;
for (int i=1; i<=N; i++)
{
fin>>v[i];
}
fin>>M;
for (int i=1; i<=M; i++)
{
int q;
fin>>q;
if (q==0)
{
int x;
fin>>x;
fout<<cautPozMax(x)<<"\n";
}
else if (q==1)
{
int x;
fin>>x;
int poz = cautPozMax(x);
if(poz!=1) fout<<poz<<"\n";
else {
int j =1 ;
while (v[j]<=x) j++;
fout<<j-1<<"\n";
}
}
else if (q==2)
{
int x;
fin>>x;
fout<<cautPozMin(x)<<"\n";
}
}
}