Pagini recente » Cod sursa (job #2782672) | Cod sursa (job #534989) | Cod sursa (job #1945951) | Cod sursa (job #3213275) | Cod sursa (job #3252306)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
const int Nmax = 1e5 + 5, Bmax = 500;
int v[Nmax], sum[Bmax];
int n, bsize = 0;
void update(int a, int b, int val)
{
int bucketa = a / bsize, bucketb = b / bsize, i;
if (bucketa == bucketb)
for (i = a; i <= b; i++)
{
v[i] += val;
sum[bucketa] += val;
}
else
{
for (i = bucketa + 1; i < bucketb; i ++)
sum[i] += val;
for (i = a; i < (bucketa + 1) * bsize; i ++)
{
v[i] += val;
sum[bucketa] += val;
}
for (i = bucketb * bsize; i <= b; i ++)
{
v[i] += val;
sum[bucketb] += val;
}
}
}
int query(int a, int b)
{
int bucketa = a / bsize, bucketb = b / bsize, ans = 0, i;
if (bucketa == bucketb)
for (i = a; i <= b; i++)
ans += v[i];
else
{
for (i = bucketa + 1; i < bucketb; i ++)
ans += sum[i];
for (i = a; i < (bucketa + 1) * bsize; i ++)
ans += v[i];
for (i = bucketb * bsize; i <= b; i ++)
ans += v[i];
}
return ans;
}
int main()
{
int t, tip, a, b, val, i;
cin >> n >> t;
bsize = sqrt(n);
for (i = 0; i < n; i++)
{
cin >> v[i];
int bucket = i / bsize;
sum[bucket] += v[i];
}
while (t--)
{
cin >> tip >> a >> b;
if (tip == 1)
cout << query(a - 1, b - 1) << '\n';
else
update(a - 1, a - 1, - b);
}
return 0;
}