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