Cod sursa(job #1043238)

Utilizator vlad_beluVlad Belu vlad_belu Data 28 noiembrie 2013 10:15:22
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;
int n,m,i,s=2,maxim;
int v[100001];
ifstream f("datorii.in");
ofstream g("datorii.out");

void up(int poz, int a,int b,int st,int dr);
void que(int poz,int a,int b,int st,int dr);

int main(){
    bool x; int b,a;
    f>>n>>m;
    while(s<n) s*=2;
    for(short i=1;i<=n;i++)
        {f>>b; up(1,i,b,1,s);}


    while(m--){
        f>>x>>a>>b;
        if(x){
            maxim=0;
            que(1,a,b,1,s);
            g<<maxim<<endl;
        }
    else{
            up(1,a,-b,1,s);
        }
    }



f.close();g.close();
return 0;
}

void up(int poz, int a,int b,int st,int dr){
    if(st==dr){
        v[poz]+=b;
        return;}
    int mij=(st+dr)/2;
    if(a<=mij) up(2*poz,a,b,st,mij);
    else up(2*poz+1,a,b,mij+1,dr);
    v[poz]=v[2*poz]+v[2*poz+1];
}

void que(int poz,int a,int b,int st,int dr){
    if(st>=a && b>=dr){
        if(v[poz]>maxim)maxim+=v[poz];
        return;}
    else{
        int mij=(st+dr)/2;
        if(a<=mij) que(2*poz,a,b,st,mij);
        if(b>mij) que(2*poz+1,a,b,mij+1,dr);
    }

}