Tipo de carga (diferencial)

 

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 }

 

 

 

 

 

-

Supongo que te gusta

Origin www.cnblogs.com/jiamian/p/12556532.html
Recomendado
Clasificación