Pagini recente » Cod sursa (job #2461333) | Cod sursa (job #1753672) | Cod sursa (job #1079016) | Cod sursa (job #2837797) | Cod sursa (job #1310237)
#include <fstream>
#include <cmath>
using namespace std;
int n, Q, v[15100], rad, suma[205], bucata[15100];
inline void Update(int poz, int val)
{
v[poz] -= val;
suma[bucata[poz]] -= val;
}
inline int Query(int st, int dr)
{
int rez = 0;
while(bucata[st] != bucata[dr])
{
if(st % rad == 1)
{
rez += suma[bucata[st]];
st += rad;
}
else
{
while(st % rad != 1)
{
rez += v[st];
st++;
}
}
}
while(st <= dr)
{
rez += v[st];
st++;
}
return rez;
}
int main()
{
int i, j, tip, A, B;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> n >> Q;
for(i = 1; i <= n; ++i)
fin >> v[i];
rad = (int)sqrt(1.0 * n) + 1;
j = 1;
for(i = 1; i <= n; ++i)
{
bucata[i] = j;
suma[j] += v[i];
if(i % rad == 0)
j++;
}
while(Q--)
{
fin >> tip >> A >> B;
if(tip == 0)
Update(A, B);
if(tip == 1)
fout << Query(A, B) << "\n";
}
fin.close();
fout.close();
return 0;
}