Cod sursa(job #2989150)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 6 martie 2023 00:26:50
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<cmath>
using namespace std;

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


const int NMAX = 2e5 + 1;
const int BMAX = ceil(sqrt(NMAX));

long long mars[BMAX + 10];

int v[NMAX],block,ap[NMAX];

long long query(int pref)
{
    long long ans = 0;
    for(int i = 1; i < ap[pref] ; i++) ans += mars[i];
    for(int i = (ap[pref] - 1) * block + 1; i <= pref ; i++) ans += v[i];

    return ans;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);

    int n,q,a,b,c; cin >> n >> q; block = ceil(sqrt(n));
    ap[1] = 1;
    for(int i = 2; i <= n ; i++)
        {
            ap[i] = ap[i - 1];
            if(i % block == 1) ap[i]++;
        }

    for(int i = 1; i <= n ; i++)
        {
            cin >> v[i];
            mars[ap[i]] += v[i];

        }

    long long maxim = -1e18;
    while(q--)
        {
            cin >> a >> b >> c;
            if(a == 0)
                {
                    mars[ap[b]] -= c;
                    v[b] -= c;
                }

            else
                {
                    cout << query(c) - query(b - 1) << '\n';
                }

        }


}