Submission #1154423

#TimeUsernameProblemLanguageResultExecution timeMemory
1154423yhkhooIndex (COCI21_index)C++20
110 / 110
2468 ms48540 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; #define fi first #define se second const int MAXN = 200005; vector<int> t[4*MAXN]; int a[MAXN]; void build(int tx, int tl, int tr){ // cerr << tl << ' ' << tr << '\n'; if(tl == tr){ t[tx] = {a[tl]}; return; } int tm = (tl+tr)/2; build(tx*2, tl, tm); build(tx*2+1, tm+1, tr); merge(t[tx*2].begin(), t[tx*2].end(), t[tx*2+1].begin(), t[tx*2+1].end(), back_inserter(t[tx])); } int query(int tx, int tl, int tr, int l, int r, int x){ if(r < tl || l > tr){ return 0; } if(l == tl && r == tr){ return t[tx].end() - lower_bound(t[tx].begin(), t[tx].end(), x); } int tm = (tl+tr)/2; return query(tx*2, tl, tm, l, min(r, tm), x) + query(tx*2+1, tm+1, tr, max(l, tm+1), r, x); } int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n, q; cin >> n >> q; for(int i=1; i<=n; i++){ cin >> a[i]; } build(1, 1, n); while(q--){ int l, r; cin >> l >> r; int bl=1, br=200000, bm; while(bl < br){ // cerr << bl << ' ' << br << ' ' << bm << '\n'; bm = (bl+br)/2; if(br-bl == 1){ bm = br; } if(query(1, 1, n, l, r, bm) < bm){ br = bm-1; } else{ bl = bm; } } cout << bl << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...