Pagini recente » Cod sursa (job #102654) | Cod sursa (job #541401) | Istoria paginii runda/vacanta_11_3 | Cod sursa (job #2510467) | Cod sursa (job #3252313)
#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)
{
v[poz] -= val;
v_r[poz/rad] -= val;
}
void sum(int st, int dr)
{
int suma = 0;
while(st % rad != 0)
{
suma += v[st];
st++;
}
while((dr - 1) % rad != 0)
{
suma += v[dr];
dr--;
}
while(st < dr)
{
suma += v_r[st/rad];
st += rad;
}
out << suma << '\n';
}
void afisare(int n, int nr_r)
{
out << "V: ";
for(int i = 0; i < n; i++)
{
out << v[i] << " ";
}
out << '\n' << "V_r: ";
for(int i = 0; i <= nr_r; i++)
{
out << v_r[i] << " ";
}
out << '\n';
}
int main()
{
bool cerinta;
int n, m, i, nr_r, a, b;
in >> n >> m;
rad = (int) sqrt(n);
for(i = 0; i < n; i++)
{
in >> v[i];
v_r[i/rad] += v[i];
}
nr_r = (n - 1)/rad;
for(i = 1; i <= m; i++)
{
in >> cerinta >> a >> b;
if(cerinta == 0)
{
update(a - 1, b);
} else
{
sum(a - 1, b - 1);
}
}
return 0;
}