Cod sursa(job #2420887)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 13 mai 2019 15:25:46
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
#define M 10000000
int n,m,i,v[100001],x,y,s,l,t,o;
char r[M];
inline int A()
{
  	int s=0;
  	for(;r[t]<48;t++);
  	for(;r[t]>47;t++)
  		s=s*10+r[t]-48;
  	return s;
}
inline void S(int x)
{
    if(x==-1)
    {
        r[o++]=45,r[o++]=49,r[o++]=10;
        return;
    }
    int i,d=x>99999?6:x>9999?5:x>999?4:x>99?3:x>9?2:1;
    for(i=d-1;i>=0;x/=10,i--)
        r[o+i]=x%10+48;
    r[o+d]=10,o+=d+1;
}
int main()
{
    freopen("cautbin.in","r",stdin),freopen("cautbin.out","w",stdout),fread(r,1,M,stdin),n=A();
    for(i=1;i<=n;i++)
        v[i]=A();
    for(m=A(),l=1;l<=n;l<<=1);
    while(m--)
    {
        x=A(),y=A();
        if(x<2)
        {
            for(s=l,i=0;s;s>>=1)
                if(i+s<=n&&v[i+s]<=y)
                    i+=s;
            S((!x&&v[i]!=y?-1:i));
            continue;
        }
        for(s=l,i=n;s;s>>=1)
            if(i>s&&v[i-s]>=y)
                i-=s;
        S(i);
    }
    fwrite(r,1,o,stdout);
}