Pagini recente » Cod sursa (job #69401) | Cod sursa (job #1495697) | Cod sursa (job #2796162) | Cod sursa (job #1911588) | Cod sursa (job #3252302)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, q, v[15005], bc[200], rad, nrb;
int st_bucket(int b)
{
return (b - 1) * rad + 1;
}
int dr_bucket(int b)
{
return min(n, b * rad);
}
int find_bucket(int poz)
{
if(poz % rad == 0)
return poz / rad;
return poz / rad + 1;
}
int main()
{
f >> n >> q;
rad = sqrt(n);
nrb = 1;
for(int i = 1; i <= n; i ++)
{
f >> v[i];
if(i <= dr_bucket(nrb))
bc[nrb] += v[i];
if(i == dr_bucket(nrb)) nrb ++;
}
for(int i = 1; i <= q; i ++)
{
int op, x, y;
f >> op >> x >> y;
if(op == 0)
{
int b = find_bucket(x);
bc[b] -= y; v[x] -= y;
}
else
{
int b1 = find_bucket(x), b2 = find_bucket(y), sumi = 0;
for(int j = x; j <= dr_bucket(b1); j ++)
sumi += v[j];
for(int j = st_bucket(b2); j <= y; j ++)
sumi += v[j];
for(int j = b1 + 1; j < b2; j ++)
sumi += bc[j];
g << sumi << '\n';
}
}
return 0;
}