Play with numbers

You are given an array of n numbers and q queries. For each query, you have to print the floor of the expected value(mean) of the subarray from L to R.

Example:

Input:  n = 5, q = 3, a ={1,2,3,4,5}, queries={{1,3},{2,4},{2,5}}

Output:

2 3 3

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

long long tree[2000012];
long long arr[1000002];
void build(long long nodelong long startlong long end)
{
    if (start == end)
    {
        tree[node] = arr[start];
    }
    else
    {
        long long mid = (start + end) / 2;
        build(2 * nodestartmid);
        build(2 * node + 1mid + 1end);
        tree[node] = tree[2 * node] + tree[2 * node + 1];
    }
}
long long query(long long nodelong long start,
                long long endlong long llong long r)
{
    if (r < start || l > end)
        return 0;
    if (l <= start && r >= end)
        return tree[node];
    long long mid = (start + end) / 2;
    long long p1 = query(node * 2startmidlr);
    long long p2 = query(node * 2 + 1mid + 1endlr);
    return p1 + p2;
}

void playWithNumbers(long long nlong long q,
                     long long a[],
                     vector<vector<long long>> &queries)
{
    for (long long i = 1i <= ni++)
        arr[i] = a[i - 1];
    build(11n);

    for (long long i = 0i < qi++)
    {
        long long l = queries[i][0]r = queries[i][1];

        long long sum;
        sum = query(11nlr);

        cout << sum / (r - l + 1<< "\n";
    }
}
int main()
{

    long long n = 5q = 3;
    long long a[] = {12345};
    vector<vector<long long>> queries = {{13}, {24}, {25}};

    playWithNumbers(nqaqueries);

    return 0;
}


No comments:

Post a Comment