Submission #1300439

#TimeUsernameProblemLanguageResultExecution timeMemory
1300439gustavovhgIndex (COCI21_index)C++20
110 / 110
288 ms6164 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 ordem[MAXN]; int inicio = 1; int fim = 0; int hAtual = 0; int quantidadeMaiorIgual = 0; void adicionar(int posicao) { int valor = citacoes[posicao]; if (valor >= MAXN) { valor = MAXN - 1; } frequencia[valor]++; if (valor >= hAtual) { quantidadeMaiorIgual++; } if (quantidadeMaiorIgual - frequencia[hAtual] >= hAtual + 1) { quantidadeMaiorIgual -= frequencia[hAtual]; hAtual++; } } void remover(int posicao) { int valor = citacoes[posicao]; if (valor >= MAXN) { valor = MAXN - 1; } frequencia[valor]--; if (valor >= hAtual) { quantidadeMaiorIgual--; } if (quantidadeMaiorIgual < hAtual) { hAtual--; quantidadeMaiorIgual += frequencia[hAtual]; } } 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]; if (citacoes[i] > n) { citacoes[i] = n + 1; } } for (int i = 0; i < q; i++) { cin >> esquerda[i] >> direita[i]; ordem[i] = i; } sort(ordem, ordem + q, [&](int a, int b) { int blocoA = esquerda[a] / TAM_BLOCO; int blocoB = esquerda[b] / TAM_BLOCO; if (blocoA != blocoB) { return blocoA < blocoB; } if (blocoA % 2 == 0) { return direita[a] < direita[b]; } else { return direita[a] > direita[b]; } }); for (int i = 0; i < q; i++) { int id = ordem[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] = hAtual; } 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...