Pagini recente » Cod sursa (job #544779) | Cod sursa (job #2943739) | Cod sursa (job #956473) | Cod sursa (job #1908652) | Cod sursa (job #2334571)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int v[100001];
int cbin0(int x,int l)
{
int pos=0,msk;
v[0]=-1;
for(int msk=1<<20;msk>=1;msk=msk>>1)
if(pos+msk<=l && v[pos+msk]<=x)
pos+=msk;
if(v[pos]==x)
{
return pos;
}
else
{
return-1;
}
}
int cbin1(int x,int l)
{
v[0]=-1;
int pos=0,msk;
for(int msk=1<<20;msk>=1;msk=msk>>1)
if(pos+msk<=l && v[pos+msk]<=x)
pos+=msk;
while(v[pos]>x)
{
pos--;
}
return pos;
}
int cbin2(int x,int l)
{
v[0]=-1;
int pos=0,msk;
for(int msk=1<<20;msk>=1;msk=msk>>1)
if(pos+msk<=l && v[pos+msk]<=x)
pos+=msk;
while(v[pos]==x)
{
pos--;
}
while(v[pos]<x)
{
pos++;
}
return pos;
}
int main()
{
int M,i,k,x,n;
in>>n;
for(i=1;i<=n;i++)
{
in>>v[i];
}
sort(v+1,v+n+1);
in>>M;
while(M--)
{
in>>k>>x;
if(k==0)
{
out<<cbin0(x,n)<<'\n';
}
if(k==1)
{
out<<cbin1(x,n)<<'\n';
}
if(k==2)
{
out<<cbin2(x,n)<<'\n';
}
}
return 0;
}