Pagini recente » Cod sursa (job #3160683) | Cod sursa (job #1656436) | Cod sursa (job #1546767) | Rating CNILC.Delia.Theo.Stefan (We_love_alexniuclae) | Cod sursa (job #320805)
Cod sursa(job #320805)
#include "fstream"
#include "iostream"
using namespace std;
#define NMAX 15000
long long a[NMAX];
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 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;
}