Submission #1304848

#TimeUsernameProblemLanguageResultExecution timeMemory
1304848Hamed_GhaffariIndex (COCI21_index)C++20
110 / 110
778 ms23448 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using pii = pair<int, int>; using pll = pair<long long, long long>; using ull = unsigned long long; #ifdef HAMED #define DB 1 #else #define DB 0 #endif #define debug if(DB) cout #define X first #define Y second #define SZ(x) int(x.size()) #define all(x) x.begin(), x.end() #define mins(a,b) (a = min(a,b)) #define maxs(a,b) (a = max(a,b)) #define Mp make_pair #define lc id<<1 #define rc lc|1 #define mid ((l+r)>>1) mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll INF = 1e9 + 23; const ll MOD = 1e9 + 7; const int MXN = 2e5 + 5; const int LOG = 23; int n, q, p[MXN], ql[MXN], qr[MXN], L[MXN], R[MXN]; vector<int> pos[MXN], vec[MXN]; int fen[MXN]; void updx(int p, int x) { for(; p<=n; p+=p&-p) fen[p] += x; } int getx(int l, int r) { int res = 0; for(; r; r-=r&-r) res += fen[r]; for(--l; l; l-=l&-l) res -= fen[l]; return res; } void Main() { cin >> n >> q; for(int i=1; i<=n; i++) { cin >> p[i]; pos[p[i]].push_back(i); } for(int i=1; i<=q; i++) { cin >> ql[i] >> qr[i]; L[i] = 1; R[i] = qr[i]-ql[i]+2; } while(1) { bool fnd = 0; for(int i=1; i<=n; i++) vec[i].clear(); for(int i=1; i<=q; i++) if(R[i]-L[i]>1) vec[(L[i]+R[i])>>1].push_back(i), fnd = 1; if(!fnd) break; fill(fen+1, fen+n+1, 0); for(int i=n; i>=1; i--) { for(int j : pos[i]) updx(j, 1); for(int j : vec[i]) (getx(ql[j], qr[j])>=i ? L : R)[j] = i; } } for(int i=1; i<=q; i++) cout << L[i] << '\n'; } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); int T = 1; // cin >> T; while(T--) Main(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...