Cod sursa(job #941928)

Utilizator alexblackFMI - Dumitrache Alexandru alexblack Data 20 aprilie 2013 09:01:40
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("datorii.in");
ofstream out("datorii.out");
int const N=100000000;
int n,m,st,dr,poz,val,t[N];
int maxi(int x, int y)
{
    if(x>y) return x;
    return y;
}
void add(int p,int a, int b)
{
    if(a==poz && b==poz)
    {t[p]=val;return;}
    int m=(a+b)/2;
    if(poz<=m)  add(p*2,a,m);
    if(poz>m)   add(p*2+1,m+1,b);
    t[p]=t[p*2]+t[p*2+1];
}
int query(int p, int a, int b)
{
    if(st<=a && b<=dr)  return t[p];
    int m=(a+b)/2;  int r1,r2;
    if(st<=m)r1=query(2*p,a,m);    else r1=0;
    if(dr>m) r2=query(2*p+1,m+1,b);else r2=0;
    return r1+r2;
}
int main()
{
    in>>n>>m;   int x;
    for(poz=1;poz<=n;poz++)
    {in>>val;add(1,1,n);}
    for(int i=1;i<=m;i++)
    {
        in>>x>>poz>>val;
        st=poz; dr=val;
        if(x==0){dr=poz;val=query(1,1,n)-val;add(1,1,n);}
        if(x==1)out<<query(1,1,n)<<"\n";
    }
    return 0;
}