Cod sursa(job #3328704)

Utilizator AndreiMaliniciAndrei Mihai Malinici AndreiMalinici Data 9 decembrie 2025 17:56:32
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <cmath>

using namespace std;


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

int v[15005];

//sume
int batog[15005];

int main()
{
    int n, m;
    fin >> n >> m;

    int nr = sqrt(n);  //dimensiunea blocului

    for(int i = 0; i < n; i++)
    {
        fin >> v[i];
        batog[i/nr] += v[i];
                                  //indicele blocului in batog
    }

    for(int i = 1; i <= m; i++)
    {
        int tip, x, y;
        fin >> tip >> x >> y;

        if(tip == 0)
        {
            x--;  // am inceput de la 0

           //scadem sum anterioara
            batog[x/nr] -= v[x];

            //adaugam suma noua
            batog[x/nr] += y;

            //actual ziua
            v[x] = y;
        }
        else
        {
            x--; y--;
            int s = 0;

            //adaugam pana la inc primului bloc ocmplet
            while(x % nr != 0 && x <= y)
            {
                s += v[x]; //adaugam val zilei
                x++;
            }
            while(x + nr - 1 <= y)
            {
                s += batog[x/nr]; // adaugam suma blocului
                x += nr;        //urm bloc
            }

            //restul zilelor de la sf intervalului
            while(x <= y)
            {
                s += v[x]; // adaugam valoarea zilei
                x++;
            }
            fout << s << "\n";
        }
    }

    return 0;
}