Ci sono 2 cerchi e i loro centri sono fissi e verranno dati come input. Quindi ci saranno n punti, le cui coordinate xey sono date come input.Conteggio del numero totale di punti all'interno di 2 cerchi
Infine, ci saranno q query. Per ogni query, verrà indicato il raggio dei due cerchi (Lasciali essere r1 e r2). Emettere il numero totale di punti all'interno del primo cerchio o del secondo cerchio per ogni query. Un punto si trova all'interno di un cerchio se la distanza dal punto al centro è inferiore o uguale al raggio del cerchio.
Vincoli: n, q < = 10^6 r1, r2 < = 10^7 e per ogni coordinata, | x | e | y | < = 10^6
Sto cercando un algoritmo di pre-elaborazione O (nlogn) o O (nlog^2n) e poi O (logn) per query. O (n) la soluzione per query è troppo lenta. Qualche idea su come rompere questo?
Creare due array che classificano i punti in base alla loro distanza. Ciò richiede O (n log (n)) per l'ordinamento. Quindi eseguire una ricerca binaria per query in entrambi gli array per trovare l'ultimo punto nella rispettiva cerchia. Questo richiede O (log (n)). –
Se un punto si trova all'interno di entrambi i cerchi, verrà conteggiato due volte – user2040997