Cod sursa(job #1708459)

Utilizator TonisonIlle Antoniu Nicolae Tonison Data 27 mai 2016 09:36:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <vector>

using namespace std;

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

int N,M;
vector<int> aib(15000,0);

void update(int val, int x)
{
    do
    {
        aib[x]+=val;
        x+= x&(-x);
    }
    while(x<=N);
}

int query(int x)
{
    int suma=0;
    while(x!=0)
    {
        suma+=aib[x];
        x-=x&(-x);
    }
    return suma;
}

int main()
{
    f>>N>>M;
    int p,x,y;
    for(int i=1; i<=N; ++i)
    {
        f>>x;
        update(x,i);
    }
    for(int i=1; i<=M; ++i)
    {
        f>>p>>x>>y;
        if(p==0)
        {                           //ziua valoarea
            update(-y,x);           //valoare pozitie
        }
        else
        {
            g<<query(y)-query(x-1)<<"\n";
        }
    }
    return 0;
}