Pagini recente » Cod sursa (job #2019199) | Cod sursa (job #2909831) | Cod sursa (job #940047) | Cod sursa (job #655540) | Cod sursa (job #3316998)
#include <iostream>
#include<fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v1[100001], v2[100001];
int main()
{
int n, ant, poz=1,x;
in>>n;
in>>ant;
v1[poz]=ant;
v2[poz]=1;
for(int i=2; i<=n; i++) {
in>>x;
if(ant==x) ///adaug in v2 (cresc grupa de nr egale)
v2[poz]++;
else ///adaug in v1, incep o noua grupa de nr egale
{
poz++;
v1[poz]=x;
v2[poz]=1;
}
ant=x;
}
// for(int i=1;i<=poz;i++)
// cout<<v1[i]<<" ";
// cout<<'\n';
for(int i=1;i<=poz;i++)
{
v2[i]=v2[i]+v2[i-1];
// cout<<v2[i]<<" ";
}
long long m, nr, y, st, dr, mij, aux=-1;
in>>m;
for(int i=1; i<=m; i++) {
in>>nr>>y;
if(nr==0) {
st=1;
dr=poz;
aux=-1;
while(st<=dr) {
mij=st + (dr-st)/2;
if(v1[mij]==y)
{ aux=mij;
break;}
if(v1[mij]<y)
st=mij+1;
else if(v1[mij]>y)
dr=mij-1;
}
if(aux!=-1)
out<<v2[aux]<<'\n';
else
out<<aux<<'\n';
}else if(nr==1){
st=1;
dr=poz;
aux=-1;
while(st<=dr) {
mij=st + (dr-st)/2;
if(v1[mij]==y){
aux=mij;
break;}
if(v1[mij]<y)
st=mij+1;
else if(v1[mij]>y)
dr=mij-1;
}
if(aux!=-1)
out<<v2[aux]<<'\n';
else
out<<v2[dr]<<'\n';
}else if(nr==2){
st=1;
dr=poz;
aux=-1;
while(st<=dr) {
mij=st + (dr-st)/2;
if(v1[mij]==y){
aux=mij;
break;}
if(v1[mij]<y)
st=mij+1;
else if(v1[mij]>y)
dr=mij-1;
}
if(aux!=-1)
out<<v2[aux-1]+1<<'\n';
else
out<<v2[st-1]+1<<'\n';
}
}
return 0;
}