This is Code Apocalypse !!!

This is CODE APOCALYPSE!! People are fighting against each other, not for food, money, or life but for points. There are n people and each of them is fighting for some number of points.

Now you will be given q queries containing l and r. You have to tell the maximum number of people who are fighting for same number of point from l to r.

Example:

Input:  n = 6, q = 2, arr = {1, 1, 1, 2, 3, 3},queries = {{3, 6}, {1, 6}}

Output:

2 3

Approach:

C++

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

long long a[1000000 + 10];
struct node
{
    long long rflfmf;
tree[1000000];

void build(long long nolong long startlong long end)
{
    if (start == end)
    {
        tree[no].lf = tree[no].rf = tree[no].mf = 1;
        return;
    }
    long long mid = (start + end) >> 1;
    build(no * 2startmid);
    build(2 * no + 1mid + 1end);
    if (a[mid] == a[mid + 1])
    {
        tree[no].lf = tree[2 * no].lf +
                      tree[2 * no + 1].lf * (a[start] == a[mid]);
        tree[no].rf = tree[2 * no + 1].rf + tree[2 * 
no].rf * (a[end] == a[mid + 1]);
        long long p = tree[2 * no].rf + tree[2 * no + 1].lf;
        tree[no].mf = max(pmax(tree[2 * no].mftree[2 * 
no + 1].mf));
    }
    else
    {
        tree[no].lf = tree[2 * no].lf;
        tree[no].rf = tree[2 * no + 1].rf;
        tree[no].mf = max(tree[2 * no + 1].mf,
                          tree[2 * no].mf);
    }
}
long long query(long long nolong long start
long long endlong long llong long r)
{
    if (start > end or start > r or l > end)
        return 0;
    if (l <= start and end <= r)
        return tree[no].mf;
    long long mid = (start + end) / 2;
    long long p1 = query(2 * nostartmidlr);
    long long p2 = query(2 * no + 1mid + 1endlr);
    if (a[mid] == a[mid + 1])
    {
        long long p = min(tree[2 * no].rfmid - l + 1) +
                      min(tree[2 * no + 1].lfr - mid);
        return max(pmax(p1p2));
    }
    else
        return max(p1p2);
}
int main()
{

    long long n = 6q = 2;
    vector<intarr = {111233};
    vector<vector<int>> queries = {{36}, {16}};
    for (int i = 1i <= ni++)
        a[i] = arr[i - 1];
    build(11n);
    for (int i = 0i < qi++)
    {
        int l = queries[i][0];
        int r = queries[i][1];
        cout << query(11nlr<< "\n";
    }

    return 0;
}


No comments:

Post a Comment