std::cout << (size_t)&a
, а то адреса выводятся в 16-ричном виде, а читает он чиста в 10-ричной системе. int S(int p, int q) {
int sum = 0;
for (int d = 1; d < 10; ++d) {
for (int tens = 1; tens <= q; tens *= 10) {
int left = p - d*tens;
if (left < 0) left = 0;
else left = (left + 10*tens-1)/(10*tens);
int right = q - d*tens;
if (right < 0) right = -1;
else right /= 10*tens;
sum += d*(right - left + 1);
}
}
return sum;
}
И вообще, использование 3d массива считается нормой для такой задачи, или лучше стараться этого избегать и писать иначе?
там может (r - l) сильно меньше n.
что для вычисления max и min в очередной группе можно применить тот прием со стеком, который используется для вычисления оных на sliding window. Последняя группа смещается похожим образом. Если так, то будет вообще линейно.