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 }