Cod sursa(job #2644979)

Utilizator rohitrjRohit kumar rohitrj Data 26 august 2020 17:05:37
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.02 kb
#include<bits/stdc++.h>
using namespace std;
//Optimisations
#pragma GCC target ("avx2")
#pragma GCC optimization ("unroll-loops")
#pragma GCC optimize("O2")
//shortcuts for functions
#define pb push_back
#define mp make_pair
#define ff first 
#define ss second
#define all(v) v.begin(),v.end()
#define prec(n) fixed<<setprecision(n)
#define n_l '\n'
// make it python 
#define gcd __gcd
#define append push_back
#define str to_string
// utility functions shortcuts
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
#define sswap(a,b) {a=a^b;b=a^b;a=a^b;}
#define swap(a,b) {auto temp=a; a=b; b=temp;}
#define init(dp) memset(dp,-1,sizeof(dp));
#define set0(dp) memset(dp,0,sizeof(dp));
#define bits(x) __builtin_popcount(x)
#define SORT(v) sort(all(v))
#define endl "\n"
#define forr(i,n) for(ll i=0;i<n;i++)
// declaration shortcuts
typedef long long int ll;
#define int ll
// Constants
constexpr int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};
constexpr ll INF = 1999999999999999997; 
constexpr int inf= INT_MAX;
constexpr int MAXSIZE = int(1e6)+5;
constexpr auto PI  = 3.14159265358979323846L;
constexpr auto oo  = numeric_limits<int>::max() / 2 - 2;
constexpr auto eps = 1e-6;
constexpr auto mod = 1000000007;
constexpr auto MOD = 1000000007;
constexpr auto MOD9 = 1000000009;
constexpr auto maxn = 100006;
void IOfile(){
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out","w", stdout);
}
void fastio(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
int32_t main(){
	fastio();
	IOfile();
	int n;
	cin >> n;
	map<int,vector<int>>f;
	set<int>s;
	for(int i = 1; i <= n; i++){
		int x;
		cin >> x;
		s.insert(x);
		f[x].push_back(i);
	}
	int m;
	cin >> m;
	while(m--){
		int t;
		cin >> t;
		int x;
		cin >> x;
		if(t == 0){
			if(s.count(x)){
				cout << f[x].back() << "\n";
			}else cout << 1 << "\n";
		}else if(t == 1){
			auto t = s.lower_bound(x);
			if(t == s.end()) t--;
			cout << f[*t].back() << "\n";
		}else{
			auto t = s.upper_bound(x);
			cout << f[*t][0] << "\n";
		}
	}
}