Вот пример ввода < /p>
Код: Выделить всё
4 2
5 7 4 1
2 3
3 4
< /code>
Вывод должен быть < /p>
2
1
< /code>
Здесь p = [5, 7, 4, 1], запрос на диапазоне [2, 3] должен дать 2, потому что 2 статьи в этом диапазоне цитировались не менее двух раз (специфически 7 и 4 раза). Запрос на [3, 4] должен дать 1. < /P>
Проведение двоичного поиска на субраре каждого запроса o (qnlogn). Этот код является моей попыткой решения проблемы. К сожалению, это дает правильные ответы, но превышает 3 второго времени. Сроки предназначены для выполнения всей программы, так что это включает время для чтения ввода. Я также попробовал Scanf #include
int p[200005];
int main() {
using namespace std;
int n;
cin >> n;
int q;
cin >> q;
for (int i = 0; i < n; i++) {
cin >> p[i + 1];
}
for (int i = 0; i < q; i++) {
int l;
cin >> l;
int r;
cin >> r;
int lo = 1, hi = n;
while (lo = mid) {
lo = mid + 1;
} else {
hi = mid - 1;
}
}
cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... fficiently
Мобильная версия