Cod sursa(job #1221133)

Utilizator xtreme77Patrick Sava xtreme77 Data 19 august 2014 16:56:09
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>

const char IN [ ] = "datorii.in" ;
const char OUT [ ] = "datorii.out" ;
const int MAX = 15014 ;

using namespace std;

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;

int ARB [ MAX << 2 ] , VAL , OP ;

void create ( int pos , int st ,int dr , int initpos )
{
    if ( st == dr )
    {
        if ( OP == 1 )
            ARB [ pos ] = VAL ;
            else ARB [ pos ] -= VAL ;
        return ;
    }
    int mij = ( st + dr ) >> 1 ;
    if ( initpos <= mij )
        create ( pos << 1 , st , mij , initpos ) ;
        else create ( pos << 1 | 1 , mij + 1 , dr , initpos ) ;
    ARB [ pos ] = ARB [ pos << 1 ] + ARB [ pos << 1 | 1 ] ;
}

int Query ( int pos , int st , int dr , int x , int y )
{
    if ( x <= st and dr <= y )
        return ARB  [ pos ] ;
    int mij = ( st + dr ) >> 1 , SOL = 0 ;
    if ( x <= mij )
        SOL = SOL + Query ( pos << 1 , st , mij , x , y ) ;
    if ( y > mij )
        SOL = SOL + Query ( pos << 1 | 1 , mij + 1 , dr , x , y ) ;
    return SOL ;

}

int main(   )
{
    int n , m ;
    fin >> n >> m ;
    OP = 1 ;
    for ( int i = 1 ; i <= n ; ++ i ){
        fin >> VAL ;
        create ( 1 , 1 , n , i ) ;
    }
    OP = 0 ;
    for ( ; m ; -- m )
    {
        int nr , x , y ;
        fin >> nr ;
        if ( nr == 0 ){
            fin >> x >> y ;
            VAL = y ;
            create ( 1 , 1 , n , x ) ;
        }
            else {
                fin >> x >> y ;
                fout << Query ( 1 , 1 , n , x , y ) << '\n' ;
            }
    }

    return 0;
}