Cod sursa(job #3252313)

Utilizator ElideMaria Popescu Elide Data 29 octombrie 2024 10:24:59
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <math.h>

using namespace std;

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

int v[15005], v_r[130], rad;

void update(int poz, int val)
{
    v[poz] -= val;
    v_r[poz/rad] -= val;
}

void sum(int st, int dr)
{
    int suma = 0;
    while(st % rad != 0)
    {
        suma += v[st];
        st++;
    }
    while((dr - 1) % rad != 0)
    {
        suma += v[dr];
        dr--;
    }
    while(st < dr)
    {
        suma += v_r[st/rad];
        st += rad;
    }
    out << suma << '\n';
}

void afisare(int n, int nr_r)
{
    out << "V: ";
    for(int i = 0; i < n; i++)
    {
        out << v[i] << " ";
    }
    out << '\n' << "V_r: ";
    for(int i = 0; i <= nr_r; i++)
    {
        out << v_r[i] << " ";
    }
    out << '\n';
}

int main()
{
    bool cerinta;
    int n, m, i, nr_r, a, b;
    in >> n >> m;
    rad = (int) sqrt(n);
    for(i = 0; i < n; i++)
    {
        in >> v[i];
        v_r[i/rad] += v[i];
    }
    nr_r = (n - 1)/rad;
    for(i = 1; i <= m; i++)
    {
        in >> cerinta >> a >> b;
        if(cerinta == 0)
        {
            update(a - 1, b);
        } else
        {
            sum(a - 1, b - 1);
        }
    }
    return 0;
}