Submission #1305087

#TimeUsernameProblemLanguageResultExecution timeMemory
1305087muhammad-ahmadIndex (COCI21_index)C++20
0 / 110
37 ms50372 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
#include <numeric>
#include <stack>
#include <chrono>
using namespace std;

void fast_io(){
	// freopen("", "r", stdin);
	// freopen("", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(); cout.tie();
	cout << setprecision(9);
}

#define int long long
#define endl '\n'
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define fi first
#define se second

const int N = 2e5 + 5;
int n, q, sq, a[N];
int block[400][N] = {};

int sum(int L, int R, int x) {
	int ans = 0;
	while (L <= R && L % sq != 1) {
		if (a[L] >= x) ans++;
		L++;
	}
	while (L <= R && R % sq != 0) {
		if (a[R] >= x) ans++;
		R--;
	}
	while (L <= R) {
		int b = (L + sq - 1) / sq;
		ans += block[b][x];
		L += sq;
	}
	return ans;
}

void solve() {
	cin >> n >> q;
	sq = sqrt(n) + 1;
	for (int i = 1; i <= n; i++) cin >> a[i];
	
	
	for (int i = 1; i <= n; i += sq){
		for (int j = i; j <= min(n, i + sq); j++){
			block[(i + sq - 1) / sq][a[j]]++;
		}
		for (int j = N - 2; j >= 0; j--){
			block[(i + sq - 1) / sq][j] += block[(i + sq - 1) / sq][j + 1];
		}
	}
	
	for (int Q = 1; Q <= q; Q++){
		int L, R; cin >> L >> R;
		int l = 0, r = N;
		while (r - l > 1){
			int mid = (l + r) / 2;
			int val = sum(L, R, mid);
			if (val >= mid) l = mid;
			else r = mid;
		}
		cout << l << endl;
	}
	return;
}

signed main() {
    fast_io();
    srand(chrono::steady_clock::now().time_since_epoch().count());
    int tc = 1;
    // cin >> tc;
    while (tc--) solve();
    return 0;
}



#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...