Cod sursa(job #886388)

Utilizator otto1Palaga Vicentiu-Octavian otto1 Data 22 februarie 2013 20:27:45
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;

int n, v[20000];

void add(int poz, int val)
{
    while(poz <= n)
    {
        v[poz] += val;
        poz += (poz^(poz-1))&poz;
    }
}

int query(int poz)
{
    int p, sum = 0;

    while(poz >= 1)
    {
        sum += v[poz];
        poz -= (poz^(poz-1))&poz;
    }

    return sum;
}

int main()
{
    FILE *fin=fopen("datorii.in","r");
    FILE *fout=fopen("datorii.out","w");

    int i, m, tip, a, b, aux;


    //Read
    fscanf(fin,"%d %d",&n,&m);
    for(i=1; i<=n; i++)
    {
        fscanf(fin,"%d",&aux);
        add(i,aux);
    }


    //Compute
    for(i=1; i<=m; i++)
    {
        fscanf(fin,"%d %d %d",&tip,&a,&b);
        if(tip == 0)
            add(a,-b);
        else
            fprintf(fout,"%d \n",query(b)-query(a-1));
    }
}