Cod sursa(job #2355803)

Utilizator XDDDDariusPetean Darius XDDDDarius Data 26 februarie 2019 12:36:03
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#define NMAX 15005
std::ifstream in("datorii.in");
std::ofstream out("datorii.out");

using namespace std;
int sir[NMAX];
int AIB[NMAX];
int N,teste;
void schimbare(int poz , int suma)
{
    for(int i = poz ; i<=N; i += (i)&(-i))
        AIB[i] -= suma;
}

int suma_curenta(int poz)
{
    int sol = 0;
    for(int i = poz ; i> 0 ; i -= (i)&(-i))
        sol +=AIB[i];
    return sol;
}

int main()
{
    in>>N>>teste;
    for(int i = 1; i<=N ; i++ )
    {
        in>>sir[i];
    }
    for(int i=1 ; i<=N ;i++)
    {
        ///AIB[i] = sir[i];
        for(int j = i ; j <= N; j += (j)&(-j) )
        {
            AIB[j] += sir[i];
        }
    }
    for(int i = 1 ;i<=teste ; i++)
    {
        bool numar;
        in>>numar;
        if(numar == 1)
        {
            int a , b;
            in>>a>>b;
            out<<suma_curenta(b) - suma_curenta(a-1)<<"\n";
        }
        else
        {
            int poz , scad ;
            in>>poz>>scad;
            schimbare(poz,scad);
        }
    }
    return 0;
}