Solução Informática Iniciante – Semana 50 – Problema 1

por

Solução por Lúcio Cardoso

Vamos descobrir o primeiro capítulo que não foi lido totalmente, ou seja, o capítulo que contém a página $$k$$. Se o capítulo $$i$$ contém a página $$k$$, então $$l_i \leq k$$ e $$k \leq r_i$$, ou seja, $$k$$ está entre $$l_i$$ e $$r_i$$. Assim, para encontrar o primeiro capítulo não lido, basta testar a condição acima em cada um dos capítulos e quando for verdadeira, guardamos o índice do capítulo em uma variável $$ind$$. Assim, a resposta será $$N-ind+1$$ (quantidade de capítulos desde $$ind$$ até $$N$$). A complexidade será então $$O(n)$$.

Confira o código abaixo para melhor entendimento:


// Noic – Iniciante – Semana 50 – Problema 1
// O(n)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int l[maxn], r[maxn];
int main(void)
{
int n, k;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> l[i] >> r[i];
cin >> k;
int ind; // capítulo que contém k
for (int i = 1; i <= n; i++)
if (l[i] <= k && k <= r[i])
ind = i;
cout << n-ind+1 << "\n";
}

Comentários

Comente