Pagini recente » Cod sursa (job #2396757) | Cod sursa (job #2422514) | Cod sursa (job #2839659) | Cod sursa (job #2077947) | Cod sursa (job #1290975)
#include <fstream>
using namespace std;
ifstream is("datorii.in");
ofstream os("datorii.out");
const int MaxN = 15001;
int n , m;
int a[4*MaxN];
int start, fin, pos, val, suma;
void Update(int node, int left, int right);
void Query(int node, int left, int right);
int main()
{
is >> n >> m;
int x, y, op;
for(int i =1; i <= n; ++i)
{
is >> x;
pos = i;
val = -x;
Update(1, 1, n);
}
for(int i = 1; i <= m; ++i)
{
is >> op >> x >> y;
if( op == 0 )
{
pos = x;
val = y;
Update(1, 1, n);
}
if( op == 1 )
{
suma = 0;
start = x;
fin = y;
Query(1, 1, n);
os << suma << '\n';
}
}
is.close();
os.close();
return 0;
}
void Update(int node, int left, int right)
{
if(left == right)
{
a[node] -= val;
return;
}
int mij = (left + right)/2;
if(pos <= mij) Update(node*2, left, mij);
else Update(node*2+1, mij+1, right);
a[node] = a[node*2] + a[node*2+1];
}
void Query(int node, int left, int right)
{
if(start <= left && right <= fin)
{
suma += a[node];
return;
}
int mij = (left + right) / 2;
if(start <= mij) Query(node*2, left, mij);
if(mij < fin) Query(2*node+1, mij +1, right);
}