Cod sursa(job #1036421)

Utilizator dan.ghitaDan Ghita dan.ghita Data 19 noiembrie 2013 12:58:19
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int v[150000], n, x, m, a, b, t, sq, batog[100000];
void update(int p, int val){
v[p]+=val;
int poz;
if(p%sq==0) poz=p/sq-1;
else poz=p/sq;
for(int j=poz; j<=sq; ++j) batog[j] += val;
//cout<<"bag: "<<val<<" in "<<poz<<'\n';
//batog[poz]+=val;
}
int query(int x){
int sum=0;

while(x%sq!=0) sum+=v[x], x--;
//x--;
//for(int i=x/sq-1; i>=0; --i)
sum+=batog[x/sq-1];


return sum;
}



int main()
{
f>>n>>m;
sq=(int)sqrt(n);

for(int i=1; i<=n; ++i){
    f>>x;
   update(i, x);
}
//for(int j=1; j<=sq; ++j) batog[j] += batog[j - 1];
//cout<<m;
while(m--){
    f>>t; //cout<<t<<"<-------";
    f>>a>>b;
    if(t==0) update(a, -b);
    else if(t==1) g<<query(b)-query(a-1)<<'\n';
}

//for(int j=0; j<=sq; ++j) cout<<batog[j]<<' ';
    return 0;
}