Задан числовой массив A [1..N]. Необходимо выполнить M операций вычисления количества нулевых элементов на отрезке [L, R].
Входные данные
Первая строка входного файла INPUT.TXT
содержит число N – размер
массива (N ≤ 105). Во второй строке записаны N чисел –
элементы массива, целые числа от 0 до 105. Третья строка
содержит натуральное число M – количество запросов (M ≤ 30 000).
Следующие M строк содержат пары чисел L и R (1 ≤ L ≤ R ≤ N),
описывающие отрезки.
Выходные данные
В выходной файл OUTPUT.TXT
для каждого запроса выведите через пробел
количество нулевых элементов.
Я написал структуру данных, но в моем коде есть подвох. Помогите найти мою ошибку или написать правильный код.
#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const ll N = 1e5 + 5;
const ll MAX = 2e5 + 123;
const ll MOD = 1e9 + 7;
using namespace std;
ll n, m, a[ N ];
vector< ll > v;
int main()
{
scanf( "%I64d", &n );
ll len = ceil( sqrt( n ) );
vector< ll > b( n );
for( ll i = 0; i < n; i ++ )
{
scanf( "%I64d", &a[ i ] );
b[ i ] = 0;
}
for( ll i = 0; i < n; i ++ )
{
b[ i / len ] += a[ i ] == 0;
}
scanf( "%I64d", &m );
while( m -- )
{
ll l, r, sum = 0;
scanf( "%I64d%I64d", &l, &r );
ll c_l = l / len, c_r = r / len;
if( c_l == c_r )
{
for( ll i = l; i <= r; i ++ )
if( a[ i ] == 0 )
sum ++;
}
else
{
for (int i=l, end=(c_l+1)*len-1; i<=end; ++i)
if( !a[ i ] )
sum ++;
for (int i=c_l+1; i<=c_r-1; ++i)
sum += b[i];
for (int i=c_r*len; i<=r; ++i)
if( !a[ i ] )
sum ++;
}
v.push_back( sum );
}
for( ll i = 0; i < v.size(); i ++ )
cout << v[ i ] << ' ';
}
Для этой задачи достаточно сделать массив, в котором записаны количества нулевых элементов по K-ю ячейку включительно.
0 1 2 3 4 5 6 индекс
. 3 0 2 1 0 5 входной массив
0 0 1 1 1 2 2 накопленная сумма количества нулей
Тогда ответ на запрос - это просто разность B[R]-B[L-1]
С(2,5) = B[5] - B[1] = 2 - 0 = 2
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Досталась в наследство программа Over 100 тысяч сток кодаКогда в Qt Creator запускаю в режиме дебага, в консоль каждые 10 секунд сыпятся 12 сообщений
Не могу найти как обрабатывать сигналы POST в QTcpServerНа сервер посылаются данные в следующем виде
Нужно данные от сенсора kinect передать в программу на Arduino, как это проще всего сделать? Очень желательно, чтобы использовался только язык C/C++
Создаю файл, пишу в него текст, потом хочу скопироватьНо функция copy возвращает false