// OBI 2023 - Fase 2 // Pequena Empresa - Solução O(N^2 + A * N) // Mateus Bezrutchka // var n; scanf("%d", "n"); var chefe = Array(n); var salario = Array(n); var insatisfeito = Array(n); for (var i = 0; i < n; i++) { scanf("%d %d", "chefe[i]", "salario[i]"); chefe[i]--; // estou indexando do 0 } var insatisfacao_atual; function calc_insatisfeito(i) { insatisfeito[i] = false; for (var j = 0; j < n; j++) { if (chefe[j] == i && salario[j] > salario[i]) { insatisfeito[i] = true; return; } } } function calc_insatisfacao_inicial() { insatisfacao_atual = 0; for (var i = 0; i < n; i++) { calc_insatisfeito(i); if (insatisfeito[i]) insatisfacao_atual++; } } // apenas duas pessoas podem ter sido afetadas pela // mudança atual: o próprio funcionario i, e o chefe dele function atualiza_salario(i, val) { var c = chefe[i]; var old_c_ins = insatisfeito[c]; var old_i_ins = insatisfeito[i]; salario[i] = val; calc_insatisfeito(i); calc_insatisfeito(c); var new_c_ins = insatisfeito[c]; var new_i_ins = insatisfeito[i]; if (old_i_ins != new_i_ins) { insatisfacao_atual += (new_i_ins ? 1 : -1); } if (i != 0 && old_c_ins != new_c_ins) { insatisfacao_atual += (new_c_ins ? 1 : -1); } } calc_insatisfacao_inicial(); printf("%d\n", insatisfacao_atual); var a; scanf("%d", "a"); for (var i = 0; i < a; i++) { var funcionario; var novo_salario; scanf("%d %d", "funcionario", "novo_salario"); funcionario--; atualiza_salario(funcionario, novo_salario); printf("%d\n", insatisfacao_atual); }