Pagini recente » Cod sursa (job #3184202) | Cod sursa (job #480887) | Cod sursa (job #442311) | Cod sursa (job #2803435) | Cod sursa (job #2776765)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int SIZE = 15010;
int n, m;
int arb[4*SIZE], v[SIZE];
int qry, a, b;
void buildArb(int ind, int st, int dr)
{
if(st==dr) arb[ind] = v[st];
if(st>=dr) return;
int mid = (st + dr) / 2;
buildArb(ind*2, st, mid);
buildArb(ind*2+1, mid+1, dr);
arb[ind] = arb[ind*2] + arb[ind*2+1];
}
void update(int ind, int st, int dr)
{
if(st==dr) arb[ind] = b, v[st] = b;
if(st>=dr) return;
int mid = (st + dr) / 2;
if(a<=mid) update(ind*2, st, mid);
else update(ind*2+1, mid+1, dr);
arb[ind] = arb[ind*2] + arb[ind*2+1];
}
int query(int ind, int st, int dr)
{
if(a<=st && dr<=b) return arb[ind];
int mid = (st + dr) / 2, q1 = 0, q2 = 0;
if(a<=mid) q1 = query(ind*2, st, mid);
if(mid<b) q2 = query(ind*2+1, mid+1, dr);
return q1 + q2;
}
void readit()
{
in>>n>>m;
for(int i=1; i<=n; i++)
in>>v[i];
buildArb(1, 1, n);
}
int main()
{
readit();
for(int i = 1; i <= m; i++)
{
in>>qry>>a>>b;
if(qry) out<<query(1, 1, n)<<'\n';
else
{
b=v[a]-b;
update(1, 1, n);
}
}
return 0;
}