Pagini recente » Cod sursa (job #236471) | Cod sursa (job #1057570) | Cod sursa (job #1648557) | Cod sursa (job #96757) | Cod sursa (job #320810)
Cod sursa(job #320810)
#include "fstream"
using namespace std;
//#define NMAX 15005
long long a[15000];
int n,m;
void construiesteArboreleIndexatBinar(int poz, int val)
{
if (poz<=n)
{
a[poz] += val;
int jump = poz & (-poz); //2 la puterea (nr de zerouri terminale ale lui poz)
construiesteArboreleIndexatBinar(poz + jump,val);
}
}
long long queryAIB(int poz) //returneaza suma de la 1 la poz
{
if (poz>0)
{
int jump = poz & (-poz);
return a[poz] + queryAIB(poz - jump);
}
else return 0;
}
void updateAIB(int poz, int val)
{
if (poz <= n)
{
a[poz] -= val;
int jump = poz & (-poz);
updateAIB(poz + jump, val);
}
}
void citire()
{
int i,bit,x,y;
ifstream f("datorii.in");
ofstream g("datorii.out");
f>>n>>m;
for (i=0;i<n;i++)
{
f>>x;
construiesteArboreleIndexatBinar(i + 1, x);
}
for (i=0;i<m;i++)
{
f>>bit>>x>>y;
if (bit == 1)
g<<queryAIB(y) - queryAIB(x - 1)<<endl;
else
updateAIB(x,y);
}
g.close();
f.close();
}
int main()
{
citire();
return 0;
}