Pagini recente » Cod sursa (job #1521972) | Cod sursa (job #312163) | Cod sursa (job #1521727) | Cod sursa (job #70347) | Cod sursa (job #1127355)
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int a[33000],n,m,inf=2000000000,zi,b,suma;
int calc (int poz)
{
if (a[poz]!=inf)
return a[poz];
a[poz]=calc (2*poz)+calc (2*poz+1);
}
void update (int poz)
{
if (!poz)
return;
a[poz]-=b;
update (poz/2);
}
void querry (int poz,int st,int dr)
{
if (st>=zi&&dr<=b)
{
suma+=a[poz];
return;
}
int mij=(st+dr)/2;
if (mij>=zi)
querry (poz<<1,st,mij);
if (mij<b)
querry (poz*2+1,mij+1,dr);
}
int main()
{
int i,poz=1,tip;
fin>>n>>m;
while (poz<=n)
poz=poz<<1;
for (i=1;i<=poz<<1;i++)
a[i]=inf;
for (i=1;i<=n;i++)
fin>>a[poz+i-1];
calc (1);
//for (i=1;i<=poz*2-1;i++)
//fout<<a[i]<<' ';
for (i=1;i<=m;i++)
{
fin>>tip>>zi>>b;
if (!tip)
update (zi+poz-1);
else
{
suma=0;
querry (1,1,poz);
fout<<suma<<'\n';
}
}
fin.close ();
fout.close ();
return 0;
}