Pagini recente » Cod sursa (job #2265025) | Cod sursa (job #1702435) | Cod sursa (job #2207043) | Cod sursa (job #2385730) | Cod sursa (job #2209759)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
const int N=1 << 18;
int t[N];
int poz,val,a,b;
int intergoare (int p, int st, int dr)
{
if (a<=st && b>=dr)
return t[p];
int m=(st+dr) / 2, s=0;
if (a<=m)
{
s += intergoare( 2*p , st ,m );
}
if (b>m)
{
s += intergoare( 2*p+1 , m+1 , dr );
}
return s;
}
void actualizare(int p, int st, int dr)
{
if (st==dr)
{
t[p]-=val;
return;
}
int m=(st+dr)/2;
if (poz<=m)
{
actualizare(2*p,st,m);
}
else
{
actualizare(2*p+1,m+1,dr);
}
t[p] = t[ 2*p ] + t[ 2*p+1 ];
}
int main()
{
int n,m,o,i;
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>val;
val = -val;
poz=i;
actualizare(1,1,n);
}
for (i=1;i<=m;i++)
{
f>>o;
if (o==0) {
f >> poz >> val;
actualizare(1,1,n);
}
if (o==1) {
f >> a >> b;
g<<intergoare(1,1,n)<<"\n";
}
}
return 0;
}