Mi sto preparando per la competizione ACM e sono bloccato con questo problema.Calcolo massimo da [currPos] a [currPos - k] nel grande array
Si sono edifici con data posizione Xi e l'altezza Hi gli scudi sono realizzati in acciaio e hanno bisogno di essere sostenuti da almeno due edifici con la stessa altezza. L'estremità destra dello scudo deve trovarsi in cima ad alcuni edifici. Tutti gli edifici che si trovano sotto lo scudo (compresi quelli che si trovano all'estremità) sono protetti da quello scudo e la loro altezza non può superare l'altezza su cui è posizionato lo scudo. Un edificio può essere protetto con al massimo uno scudo.
Ti viene dato un numero infinito di scudi, ciascuno con la stessa lunghezza L. Trova il numero massimo di edifici che possono essere protetti dagli scudi e trova il numero minimo di scudi che possono essere utilizzati per proteggere il numero massimo di edifici .
ingresso
La prima linea di input contiene un intero positivo T (1 < = T < = 20), il numero di casi di test.
Ogni test inizia con una linea che contiene esattamente due numeri interi: il numero di edifici N (2 < = N < = 100.000) e la lunghezza di uno scudo L (1 < = L < = 1000000000). In ciascuna delle successive righe N ci sono due numeri interi, Xi (la posizione dell'edificio i-esimo, 0 < = Xi < = 1.000.000.000) e Ciao (l'altezza dell'edificio i-esimo, 1 = Ciao < = 1.000.000.000). Gli edifici sono dati ordinati in base alla loro coordinata x. Non ci saranno due edifici con la stessa coordinata x.
uscita
Per ogni test, in due una linea, uscita il numero massimo di edifici che possono essere coperti e il numero minimo di schermi che possono essere utilizzati per questo scopo.
Esempio
Input
17 3
1 2
2 1
3 2
4 3
5 1
6 2
7 4
8 2
9 3
10 4
11 2
15 2
16 1
17 3
18 3
19 1
20 2
Output
11 3
Explanation:
first shield: 1,2,3
second shield: 7,8,9,10
third shield: 15,16,17,18
Ovviamente la soluzione di forza bruta è facile codice per codice, ma non riuscirà a termine (1s), stavo leggendo su albero segmento, ma dal momento che non hanno funzionato con l'albero del segmento sono interessato è il modo per risolvere questo problema o c'è qualche soluzione più semplice che mi manca?
PS Anche se dice che la lunghezza dello scudo è L, in realtà è L + 1, l'ultimo edificio deve essere il più alto e avere un edificio in posizione [Xi-1, Xi-L] con la stessa altezza per poter posizionare uno scudo e le posizioni degli edifici verranno ordinate.