제출 #1300434

#제출 시각아이디문제언어결과실행 시간메모리
1300434gustavovhgIndex (COCI21_index)C++20
20 / 110
2593 ms1496 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 200005; const int TAM_BLOCO = 450; int citacoes[MAXN]; int frequencia[MAXN]; int respostas[MAXN]; int esquerda[MAXN]; int direita[MAXN]; int idConsulta[MAXN]; int inicio = 1; int fim = 0; void adicionar(int posicao) { frequencia[citacoes[posicao]]++; } void remover(int posicao) { frequencia[citacoes[posicao]]--; } int calcularH() { int soma = 0; for (int h = 200000; h >= 1; h--) { soma += frequencia[h]; if (soma >= h) { return h; } } return 0; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> citacoes[i]; } for (int i = 0; i < q; i++) { cin >> esquerda[i] >> direita[i]; idConsulta[i] = i; } sort(idConsulta, idConsulta + q, [&](int a, int b) { if (esquerda[a] / TAM_BLOCO != esquerda[b] / TAM_BLOCO) { return esquerda[a] / TAM_BLOCO < esquerda[b] / TAM_BLOCO; } if ((esquerda[a] / TAM_BLOCO) % 2 == 1) { return direita[a] < direita[b]; } else { return direita[a] > direita[b]; } }); for (int i = 0; i < q; i++) { int id = idConsulta[i]; while (fim < direita[id]) { adicionar(++fim); } while (inicio > esquerda[id]) { adicionar(--inicio); } while (fim > direita[id]) { remover(fim--); } while (inicio < esquerda[id]) { remover(inicio++); } respostas[id] = calcularH(); } for (int i = 0; i < q; i++) { cout << respostas[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...