Codeforces Global Ronda 7E (árbol segmento, codiciosos)

1  #define HAVE_STRUCT_TIMESPEC
 2 #include <bits / STDC ++ h.>
 3  usando  espacio de nombres std;
4  largo  tiempo un [ 300,007 ], q [ 300,007 ], b [ 300,007 ];
5  largo  largo mx [ 1200007 ], mxid [ 1200007 ];
6  largo  largo LZ [ 1200007 ];
7  vacío hacia arriba ( de largo  a largo rt) {
 8      si (x [rt << 1 ]> = mx [rt << 1 | 1]) {
 9          mx [RT] = mx [rt << 1 ];
10          mxid [RT] = mxid [rt << 1 ];
11      }
 12      más {
 13          mx [RT] = mx [rt << 1 | 1 ];
14          mxid [RT] = mxid [rt << 1 | 1 ];
15      }
 16  }
 17  void hacia abajo ( tiempo  largo rt) {
 18      lz [rt << 1 ] + = lz [RT];
19      LZ [rt << 1 | 1 ] + =lz [RT];
20      mx [rt << 1 ] + = lz [RT];
21      mx [rt << 1 | 1 ] + = lz [RT];
22      lz [RT] = 0 ;
23  }
 24  void build ( largo  largo rt, largo  tiempo l, largo  tiempo r) {
 25      si (l == r) {
 26          mx [RT] = 0 ;
27          mxid [RT] = l;
28          de retorno ;
29      }
 30     build (rt << 1 , l, (l + r) >> 1 );
31      build (rt << 1 | 1 , ((l + r) >> 1 ) + 1 , r);
32      hasta (rt);
33  }
 34  void actualización ( tiempo  largo rt, largo  tiempo l, largo  tiempo r, largo  largo L, largo  tiempo R, largo  tiempo k) {
 35      si (L> R)
 36          de retorno ;
37      si (L <= l && r <=R) {
 38          lz [RT] + = k;
39          mx [RT] + = k;
40          de retorno ;
41      }
 42      hacia abajo (rt);
43      si (L <= ((l + r) >> 1 ))
 44          actualización (rt << 1 , l, (l + r) >> 1 , L, R, k);
45      Si (R> ((l + r) >> 1 ))
 46          actualización (rt << 1 | 1 , ((l + r) >> 1 ) + 1 , R, L, R, k);
47      hasta (rt);
48  }
 49  de largo  a largoCMX, cid;
50  void consulta ( largo  largo rt, largo  tiempo l, largo  tiempo r, largo  largo L, largo  tiempo R) {
 51      si (L <= l && r <= R) {
 52          si (mx [RT]> CMX) {
 53              CMX = mx [RT];
54              cid = mxid [RT];
55          }
 56          de retorno ;
57      }
 58      hacia abajo (rt);
59      si (L <= ((l + r) >> 1 ))
60          consulta (rt << 1 , l, (l + r) >> 1 , L, R);
61      Si (R> ((l + r) >> 1 ))
 62          consulta (rt << 1 | 1 , ((l + r) >> 1 ) + 1 , R, L, R);
63  }
 64  int main () {
 65      ios :: sync_with_stdio ( falsos );
66      cin.tie (NULL);
67      cout.tie (NULL);
68      int n;
69      cin >> n;
70      para ( int i = 1 ; i <= n; ++I) {
 71 es          CIN >> A [I];
 72          B [A [I]] = I; // almacenar el número de ocurrencias de cada localización 
73 es      }
 74      para ( int I = 1. ; I <= N-; ++ I )
 75          CIN >> Q [I];
 76      Build ( 1. , 1. , n-);
 77      int ANS = N-;
 78      Update ( . 1 , . 1 , n-, . 1 , B [N-], 1. ); // máxima ocurre posición y dejó a todos 1, lo que significa estos lugares ya la derecha hay un pequeño número de ellas (esta vez no es miembro de la bomba) 
79      para ( int= I . 1 ; I <= N-; ++ I) {
 80          COUT ANS << << "  " ;
 81          Update ( 1. , 1. , N-, 1. , Q [I], - 1. ); // cada adición una bomba, y la bomba izquierda de todas las posiciones -1, si no todos de los puntos es positivo, lo que indica que los ans actuales ilegal, ya que es igual al número de todas las partículas más grandes que la posición correcta y tiene al menos bomba x (x es el número es el primer número mayor) 
82          al mismo tiempo (MX [ 1. <=] 0 ) {
 83              --ans; // respuesta -1 redetección legalidad 
84              Update ( . 1 , . 1 , n-, . 1 , B [ANS], . 1 ); //Después de todo el número de posiciones -1 y los ans izquierdo y derecho tienen más de un pequeño número de su propio 
85          }
 86      }
 87      de retorno  0 ;
 88 }

Supongo que te gusta

Origin www.cnblogs.com/ldudxy/p/12554901.html
Recomendado
Clasificación