Enlaces: https://ac.nowcoder.com/acm/contest/4462/H
Fuente: Red de Ganado-off
título Descripción
Una plataforma de negocios con n almacenes, numerados del 1 al n.
Cuando la compra de determinados bienes, el negocio de carga se dispersará en el número de varias almacén adyacente.
No consideramos a vender, si se sabe, cuando se haya completado toda la compra de bienes, la mayoría de los tipos de depósito de almacenamiento de número de las mercancías es ¿cuánto?
Introduzca una descripción:
Dos números enteros positivos se dan en la primera fila
n-, m, 1 ≦ n m≤10, . 5 veces, y representa el número de stock de almacén.
Siguiente m líneas de tres números enteros positivos
L, R & lt, D, 1 ≦ L, r≤n, 1≤d≤10 . 9 . Numerada en el almacén entre l y r se incorporan en el número de bienes d.
Descripción Salida:
En línea de tipos de salida de mercancías se almacenan hasta el número de almacén, si hay más de un almacén para cumplir con las condiciones, la salida del número mínimo.
entrada
5 5 1 1 1 3 3 1 2 5 2 5 5 1 4 5 1
exportación
3
El tipo y alcance, la diferencia más obvia, árbol segmento pueden escribir
1 #include <bits / STDC ++ h.> 2 typedef largo tiempo LL; 3 const int INF = 0x3f3f3f3f ; 4 const dobles eps = 1E- 8 ; 5 const int mod = 1e9 + 7 ; 6 const int maxN = 1e5 + 10 ; 7 usando espacio de nombres std; 8 9 vector < int > st [maxN], ed [maxN]; 10 mapa < int , int > pf; 11 12 int main () 13 { 14 #ifdef DEBUG 15 freopen ( " sample.txt " , " R " , stdin); 16 #endif 17 18 int n, m; 19 scanf ( " % d% d " , y n, y m); 20 para ( int i = 1 ; i <= m; i ++ ) 21 { 22 int l, r, d; 23 scanf ( " % d% d% d " , & l, & r, yre); 24 st [l] .push_back (d); 25 ed [r + 1 ] .push_back (d); 26 } 27 int ID; 28 int MAX = 0 ; 29 int num = 0 ; 30 para ( int i = 1 ; i <= n; i ++ ) 31 { 32 para (auto que: st [i]) 33 { 34 si (pf [que] == 0 ) num ++ ; 35 mp [la] ++ ; 36 } 37 para (auto que: ed [i]) 38 { 39 mp [la] - ; 40 Si (pf [que] == 0 ) num-- ; 41 } 42 Si (MAX < num) 43 { 44 MAX = num; 45 Id = i; 46 } 47 } 48 printf ( " % d \ n " , id); 49 50 de retorno 0 ; 51 }
Otra forma:
1 #include <bits / STDC ++ h.> 2 typedef largo tiempo LL; 3 const int INF = 0x3f3f3f3f ; 4 const dobles eps = 1E- 8 ; 5 const int mod = 1e9 + 7 ; 6 const int maxN = 1e5 + 10 ; 7 usando espacio de nombres std; 8 9 vector <par < int , int >> vt [maxN]; 10 conjunto < int >S t; 11 multiset < int > sst; 12 13 int main () 14 { 15 #ifdef DEBUG 16 freopen ( " sample.txt " , " R " , stdin); 17 #endif 18 19 int n, m; 20 scanf ( " % d% d " , y n, y m); 21 para ( int i = 1 ; i <= m; i ++ ) 22 { 23 int l, r, d; 24 scanf ( " % d% d% d " , & l, & r, y d); 25 vt [l] .push_back ({ 1 , d}); 26 vt [r + 1 ] .push_back ({- 1 , d}); 27 } 28 int ID; 29 int MAX = 0 ; 30 para ( int i = 1 ; i <= n; i ++ ) 31 { 32 para (auto que: vt [i]) 33 { 34 int op = it.first; 35 intd = it.second; 36 Si (op == 1 ) 37 { 38 st.insert (d); 39 sst.insert (d); 40 } 41 más si (op == - 1 ) 42 { 43 sst.erase (sst.find (d)); 44 Si (sst.find (d) == sst.end ()) st.erase (d); 45 } 46 } 47 Si (MAX < st.size ()) 48 { 49 MAX =st.size (); 50 Id = i; 51 } 52 } 53 printf ( " % d \ n " , id); 54 55 de retorno 0 ; 56 }
-