Pagini recente » Cod sursa (job #377282) | Cod sursa (job #147297) | Cod sursa (job #2418052) | Cod sursa (job #210067) | Cod sursa (job #614401)
Cod sursa(job #614401)
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, p, v, start, finish, sum;
void Read();
void Update( int nod, int st, int dr);
void Query(int nod, int st, int dr );
int arb[400001];
int main()
{
Read();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> n >> m;
int x;
for( int i = 1; i <= n; ++i )
{
fin >> x;
p = i;
v = x;
Update(1, 1, n );
}
int a, b, c;
/*
for( int i = 1; i <= 4*n; ++i )
fout << arb[i] << ' ';
fout <<'\n';
*/
for( int i = 1; i <= m; ++i )
{
fin >> a >> b >> c;
if( a == 1 )
{
p = b;
v = c;
Update(1, 1, n);
}
if( a == 0 )
{
start = b;
finish = c;
sum = 0;
Query(1, 1, n);
fout << sum << ' ';
}
}
}
void Update(int nod, int st, int dr )
{
if( st == dr )
{
arb[nod] = v;
return;
}
int mij = (st + dr) / 2;
if( mij >= p )
Update( 2*nod, st, mij );
if( mij < p )
Update( 2*nod+1, mij+1, dr);
arb[nod] = arb[2*nod] + arb[2*nod+1];
}
void Query( int nod, int st, int dr )
{
if( start <= st && finish >= dr )
{
sum += arb[nod];
return;
}
int mij = (st + dr) / 2;
if( start <= mij )
Query( 2*nod, st, mij );
if( finish > mij )
Query( 2*nod + 1, mij+1, dr );
}