Задача Яндекса на алгоритмы
В первой строке входных данных записано 3 положительных целых числа n, m, q (1≤q≤105,1≤n⋅m≤106) — число дата-центров, число серверов в каждом из дата-центров и число событий соответственно. В последующих q строках записаны события, которые могут иметь один из следующих видов:
RESET i — был перезагружен i-й дата-центр (1≤i≤n)
DISABLE ij — в i-м дата-центре был выключен j-й сервер (1≤i≤n,1≤j≤m)
GETMAX — получить номер дата-центра с наибольшим произведением Ri∗Ai
GETMIN — получить номер дата-центра с наименьшим произведением Ri*Ai
Ri - количество перезапусков для i-го датацентра, Ai - количество включенных серверов у i-го в момент вызова GETMIN/GETMAX
На каждый запрос вида GETMIN или GETMAX выведите единственное положительное целое число — номер дата-центра, подходящий под условие. В случае неоднозначности ответа выведите номер наименьшего из дата-центров.
Ввод:
3 3 12
DISABLE 1 2
DISABLE 2 1
DISABLE 3 3
GETMAX
RESET 1
RESET 2
DISABLE 1 2
DISABLE 1 3
DISABLE 2 2
GETMAX
RESET 3
GETMIN
Вывод:
1
2
1
Мой код:
#include <iostream>
#include <vector>
int main() {
int n, m, q;
std::cin>>n>>m>>q;
std::vector<int> resulter;
std::string string_;
int **my_pair = new int*[n];
int *reset = new int [n];
for (int i = 0; i < n; ++i) {
my_pair[i] = new int [m];
reset[i] = 0;
for (int j = 0; j < m; j++) {
my_pair[i][j] = 1;
}
}
if (q >= 1 && q <= 100000 && n*m >= 1 && n*m <= 1000000) {
for (int i = 0; i < q; i++) {
std::cin>>string_;
if (string_ == "DISABLE") {
int a, b;
std::cin>>a>>b;
if (a >= 1 && a <= n && b >=1 && b <= m) {
my_pair[a-1][b-1] = 0;
}
}
if (string_ == "RESET") {
int a;
std::cin>>a;
if (a >= 1 && a <= n) {
for (int i = 0; i < m; i++) {
my_pair[a-1][i] = 1;
}
reset[a-1]++;
}
}
if (string_ == "GETMIN") {
int server_counter = 0;
int result = 0;
bool start = false;
int min = 0;
int number = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (my_pair[i][j] == 1) {
server_counter++;
}
}
result = server_counter * reset[i];
if (!start) {
min = result;
start = true;
} else {
if (result < min) {
number = i;
min = result;
}
}
server_counter = 0;
}
resulter.push_back(number+1);
}
if (string_ == "GETMAX") {
int server_counter = 0;
int result = 0;
bool start = false;
int max = 0;
int number = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (my_pair[i][j] == 1) {
server_counter++;
}
}
result = server_counter * reset[i];
if (!start) {
max = result;
start = true;
} else {
if (result > max) {
number = i;
max = result;
}
}
server_counter = 0;
}
resulter.push_back(number+1);
}
}
}
for (int i = 0; i < (int)resulter.size(); i++) {
std::cout<<resulter[i]<<std::endl;
}
return 0;
}
Написал вот решение, пару предоставленных тестов проходит, а дальше косяк. В чем может быть проблема?