Pagini recente » Cod sursa (job #2037829) | Profil Robybrasov | Cod sursa (job #1711925) | Cod sursa (job #1860031) | Cod sursa (job #1700317)
#include <cstdio>
using namespace std;
const int NMAX = 1e5+5;
int n,v[NMAX];
inline int a(int arg) {
int m, ans;
for(m=1; m<n; m<<=1); m>>=1;
for(ans=0; m; m>>=1)
if((ans|m)<n && v[ans|m]<=arg)
ans|=m;
if(v[ans]!=arg)
return -1;
return ans+1;
}
inline int b(int arg) {
int m, ans;
for(m=1; m<n; m<<=1); m>>=1;
for(ans=0; m; m>>=1)
if((ans|m)<n && v[ans|m]<=arg)
ans|=m;
return ans+1;
}
inline int c(int arg) {
int m, ans;
for(m=1; m<n; m<<=1); m>>=1;
for(ans=0; m; m>>=1)
if((ans|m)<n && v[ans|m]<arg)
ans|=m;
return ans+2;
}
int main(void) {
FILE *fi = fopen("cautbin.in","r");
FILE *fo = fopen("cautbin.out","w");
int m, tsk, arg;
fscanf(fi,"%d",&n);
for(int i=0; i<n; ++i)
fscanf(fi,"%d",&v[i]);
fscanf(fi,"%d",&m);
while(m--) {
fscanf(fi,"%d%d",&tsk,&arg);
switch(tsk) {
case 0:
fprintf(fo,"%d\n",a(arg));
break;
case 1:
fprintf(fo,"%d\n",b(arg));
break;
case 2:
fprintf(fo,"%d\n",c(arg));
break;
}
}
return 0;
}