제출 #698407

#제출 시각아이디문제언어결과실행 시간메모리
698407Danilo21Intercastellar (JOI22_ho_t1)C++14
100 / 100
86 ms10912 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define pb push_back #define fi first #define se second #define en '\n' #define sp ' ' #define tb '\t' #define ri(n) int n; cin >> n #define rl(n) ll n; cin >> n #define rs(s) string s; cin >> s #define rc(c) char c; cin >> c #define rv(v) for (auto &x : v) cin >> x #define pven(v) for (auto x : v) cout << x << en #define pv(v) for (auto x : v) cout << x << sp; cout << en #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define yes cout << "YES" << en #define no cout << "NO" << en #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) #define ssort(a, b) if (a < b) swap(a, b) #define bitcnt(a) (__builtin_popcountll(a)) #define bithigh(a) (63-__builtin_clzll(a)) #define lg bithigh #define highpow(a) (1LL << (ll)lg(a)) using namespace std; const ll LINF = 4e18; const int mxN = 1e6+10, INF = 2e9; ll n, m, a[mxN], cnt[mxN], pre[mxN]; int Odd(int x){ while (x%2 == 0) x /= 2; return x; } int BS(ll i){ int l = 0, r = n-1, ans = -1; while (l <= r){ int k = (l + r + 1)>>1; if (pre[k] < i){ ans = k; l = k + 1; } else r = k - 1; } return a[ans+1]; } void Solve(){ cin >> n; for (int i = 0; i < n; i++){ cin >> a[i]; int x = Odd(a[i]); cnt[i] = a[i]/x; a[i] = x; pre[i] = (i ? pre[i-1] : 0) + cnt[i]; } cin >> m; while (m--){ rl(i); cout << BS(i) << en; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cerr.tie(0); cout << setprecision(12) << fixed; cerr << setprecision(12) << fixed; cerr << "Started!" << endl; int t = 1; //cin >> t; while (t--) Solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...