Pagini recente » Cod sursa (job #9562) | Cod sursa (job #3228422) | Cod sursa (job #639901) | Cod sursa (job #1456716) | Cod sursa (job #526140)
Cod sursa(job #526140)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define NM 100005
#define PB push_back
#define MKP make_pair
int N, M, A[NM], ANS[NM];
vector < pair <int, int> > Tip0, Tip1, Tip2;
int main()
{
freopen ("cautbin.in", "r", stdin);
freopen ("cautbin.out", "w", stdout);
scanf ("%d", &N);
for (int i = 1; i <= N; ++i) scanf ("%d", &A[i]);
scanf ("%d", &M);
for (int i = 1; i <= M; ++i)
{
int op, x;
scanf ("%d %d", &op, &x);
if (op == 0) Tip0.PB(MKP(x, i));
else if (op == 1) Tip1.PB(MKP(x, i));
else Tip2.PB(MKP(x, i));
}
int ind;
// rezolv Tip0
sort (Tip0.begin(), Tip0.end());
ind = 1;
for (int i = 0; i < Tip0.size(); ++i)
{
while (ind < N && A[ind] <= Tip0[i].first) ++ind;
if (A[ind] > Tip0[i].first) --ind;
if (A[ind] != Tip0[i].first) ANS[Tip0[i].second] = -1;
else ANS[Tip0[i].second] = ind;
}
// rezolv Tip1
sort (Tip1.begin(), Tip1.end());
ind = 1;
for (int i = 0; i < Tip1.size(); ++i)
{
while (ind < N && A[ind] <= Tip1[i].first) ++ind;
if (A[ind] > Tip1[i].first) --ind;
ANS[Tip1[i].second] = ind;
}
// rezolv Tip2
sort (Tip2.begin(), Tip2.end());
ind = 1;
for (int i = 0; i < Tip2.size(); ++i)
{
while (ind < N && A[ind] < Tip2[i].first) ++ind;
ANS[Tip2[i].second] = ind;
}
for (int i = 1; i <= M; ++i) printf ("%d\n", ANS[i]);
return 0;
}