Pagini recente » Istoria paginii runda/cnrv_oji | Cod sursa (job #2626272)
#include<bits/stdc++.h>
#define nmax 15005
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m;
int arb[4*nmax];
void update(int st, int dr, int poz, int pz, int val)
{
if(st>pz || dr<pz)
return;
if(st==dr)
{
arb[poz] -= val;
return;
}
int mid=(st+dr)/2;
update(st,mid,2*poz,pz,val);
update(mid+1,dr,2*poz+1,pz,val);
arb[poz] = arb[2*poz+1] + arb[2*poz];
}
int gaseste(int st, int dr, int poz, int a, int b)
{
if(st>b || dr<a)
return 0;
if(st>=a && dr<=b)
return arb[poz];
int mid=(st+dr)/2;
int e1=gaseste(st,mid,2*poz,a,b);
int e2=gaseste(mid+1,dr,2*poz+1,a,b);
return e1+e2;
}
void solve(){
f>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
update(1,n,1,i,-x);
}
for(int i=1;i<=m;i++)
{
int c,a,b;
f>>c>>a>>b;
if(!c)
update(1,n,1,a,b);
else
g<<gaseste(1,n,1,a,b)<<'\n';
}
}
int main()
{
solve();
return 0;
}