Submission #1305149

#TimeUsernameProblemLanguageResultExecution timeMemory
1305149muhammad-ahmadIndex (COCI21_index)C++20
110 / 110
301 ms10952 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, cur, cur_ans, block, L[N], R[N], ans[N], idx[N], a[N], freq[N];

bool mo_comp (int i, int j){
	int b1 = L[i] / block;
	int b2 = L[j] / block;
	if (b1 != b2) return(b1 < b2);
	return (R[i] < R[j]);
}

void add(int i){
	if (a[i] >= cur_ans) cur++;
	freq[a[i]]++;
	while (cur - freq[cur_ans] > cur_ans){
		cur -= freq[cur_ans];
		cur_ans++;
	}
}

void remove(int i){
	if (a[i] >= cur_ans) cur--;
	freq[a[i]]--;
	while (cur < cur_ans){
		cur_ans--;
		cur += freq[cur_ans];
	}
}

void solve() {
	cin >> n >> q;
	for (int i = 1; i <= n; i++){
		cin >> a[i];
	}
	for (int i = 1; i <= q; i++){
		cin >> L[i] >> R[i];
		idx[i] = i;
	}
	block = sqrt(n) + 1;
	sort(idx + 1, idx + q + 1, mo_comp);
	int Le = 1, Ri = 0;
	for (int i = 1; i <= q; i++){
		int nidx = idx[i];
		int l = L[nidx], r = R[nidx];
		// cout << l << ' ' << r << endl;
		while (Le > l) add(--Le);
		while (Le < l) remove(Le++);
		while (Ri < r) add(++Ri);
		while (Ri > r) remove(Ri--);
		ans[nidx] = cur_ans;
	}
	// cout << Le << ' ' << Ri << endl;
	for (int i = 1; i <= q; i++) cout << ans[i] << 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...