Pagini recente » Cod sursa (job #1953386) | Cod sursa (job #2582859) | Cod sursa (job #1659463) | Cod sursa (job #1351658) | Cod sursa (job #3292936)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 15000
int v[MAXN + 123];
int aux[122 + 1];
int sq, ad = 0;
int rad(int N)
{
int st = 1, dr = 123, m, sol = 1;
while (st <= dr)
{
m = (st + dr) / 2;
if (m * m <= N)
{
sol = m;
st = m + 1;
}
else
{
dr = m - 1;
}
}
return sol;
}
int gaseste(int poz)
{
int st = 1, dr = sqrt + ad, m, sol = 0;
while (st <= dr)
{
m = (st + dr) / 2;
if (sq * (m - 1) <= poz)
{
sol = m;
st = m + 1;
}
else
{
dr = m - 1;
}
}
return sol + 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen("datorii.in", "r");
fout = fopen("datorii.out", "w");
int N, M, i, j, k, tip, st, dr, p1, p2, pp1, pp2, suma;
fscanf(fin, "%d%d", &N, &M);
sq = rad(N);
if (sq * sq != N)
{
ad = 1;
}
for (i = 1; i <= N; i++)
{
fscanf(fin, "%d", &v[i]);
}
j = 0;
for (i = 1; i <= sqrt + ad; i++)
{
k = 0;
while (k < sqrt && j < N)
{
k++;
j++;
aux[i] += v[j];
}
}
for (i = 1; i <= M; i++)
{
fscanf(fin, "%d%d%d", &tip, &st, &dr);
if (tip == 0)
{
v[st] -= dr;
p1 = gaseste(st);
aux[p1] -= dr;
}
else
{
suma = 0;
p1 = gaseste(st);
p2 = gaseste(dr);
pp1 = p1 * (sq + 1) - 1;
pp2 = p2 * sq;
while (pp1 != st)
{
suma += v[pp1];
pp1--;
}
while (pp2 != dr)
{
suma += v[pp2];
pp2++;
}
for (j = p1 + 1; j < p2; j++)
{
suma += aux[j];
}
fprintf(fout, "%d\n", suma);
}
}
fclose(fin);
fclose(fout);
return 0;
}