Pagini recente » Cod sursa (job #2551248) | Cod sursa (job #638644) | Cod sursa (job #2614468) | Cod sursa (job #1468642) | Cod sursa (job #3252338)
#include <fstream>
#include <math.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int v[15005], v_r[130], rad;
void update(int poz, int val)
{
int ind_bloc = (poz + rad - 1) / rad;
v[poz] -= val;
v_r[ind_bloc] -= val;
}
void sum(int st, int dr)
{
int suma = 0;
int ind_bloc_st = (st + rad - 1) / rad;
int ind_bloc_dr = (dr + rad - 1) / rad;
if(ind_bloc_dr == ind_bloc_st)
{
while(st <= dr)
{
suma += v[st];
st++;
}
} else
{
while(st % rad != 1)
{
suma += v[st];
st++;
}
while(dr % rad != 0)
{
suma += v[dr];
dr--;
}
while(st < dr)
{
suma += v_r[(st + rad - 1) / rad];
st += rad;
}
}
out << suma << '\n';
}
int main()
{
bool cerinta;
int n, m, i, a, b;
in >> n >> m;
rad = (int) sqrt(n) + 1;
for(i = 1; i <= n; i++)
{
in >> v[i];
v_r[(i + rad - 1)/rad] += v[i];
}
for(i = 1; i <= m; i++)
{
in >> cerinta >> a >> b;
if(cerinta == 0)
{
update(a, b);
} else
{
sum(a, b);
}
}
return 0;
}