Pagini recente » Cod sursa (job #3344200) | Cod sursa (job #3338867) | Cod sursa (job #114567) | Cod sursa (job #3327632) | Cod sursa (job #3328704)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int v[15005];
//sume
int batog[15005];
int main()
{
int n, m;
fin >> n >> m;
int nr = sqrt(n); //dimensiunea blocului
for(int i = 0; i < n; i++)
{
fin >> v[i];
batog[i/nr] += v[i];
//indicele blocului in batog
}
for(int i = 1; i <= m; i++)
{
int tip, x, y;
fin >> tip >> x >> y;
if(tip == 0)
{
x--; // am inceput de la 0
//scadem sum anterioara
batog[x/nr] -= v[x];
//adaugam suma noua
batog[x/nr] += y;
//actual ziua
v[x] = y;
}
else
{
x--; y--;
int s = 0;
//adaugam pana la inc primului bloc ocmplet
while(x % nr != 0 && x <= y)
{
s += v[x]; //adaugam val zilei
x++;
}
while(x + nr - 1 <= y)
{
s += batog[x/nr]; // adaugam suma blocului
x += nr; //urm bloc
}
//restul zilelor de la sf intervalului
while(x <= y)
{
s += v[x]; // adaugam valoarea zilei
x++;
}
fout << s << "\n";
}
}
return 0;
}