Cod sursa(job #2947532)

Utilizator Luca07Nicolae Luca Luca07 Data 26 noiembrie 2022 11:35:23
Problema SequenceQuery Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
//#include <iostream>
#include<fstream>
#include<vector>
using namespace std;

typedef long long ll;

ifstream cin("sequencequery.in");
ofstream cout("sequencequery.out");

vector<ll> st;

void update(int node, int from, int to, int pos, ll val) {
    if (from == to) {
        st[node] += val;
        return;
    }
    int m = (from + to) / 2;

    if (pos <= m) {
        update(node * 2, from, m, pos, val);
    }
    else {
        update(node * 2 + 1, m + 1, to, pos, val);
    }

    st[node] = st[node * 2] + st[node * 2 + 1];
}

ll query(int node, int from, int to, int ql,int qr) {
    if (ql<=from && to <= qr) {
        return st[node];
    }
    int m = (from + to) / 2;
    ll sum = 0;

    if (ql <= m) {
        sum += query(node * 2, from, m, ql,qr);
    }
    if (qr > m) {
        sum += query(node * 2 + 1, m + 1,to, ql, qr);
    }
    return sum;
}


int main()
{
    int n,m,x,y, i, j;
    ll nr,maxs;

    cin >> n>>m;
    st.resize(4 * n + 5);

    for (i = 1; i <= n; i++) {
        cin >> nr;
        update(1, 1, n, i, nr);
    }
    
    for (i = 0; i < m; i++) {
        cin >> x >> y;
        maxs = INT64_MIN;
        for (j = x; j <= y; j++) {
            for (int i1 = j; i1 >= x; i1--) {
                maxs = max(maxs, query(1,1,n,i1,j));
            }
        }
        cout << maxs << "\n";
    }

    return 0;
}