Pagini recente » Cod sursa (job #2473677) | Cod sursa (job #1616159) | Cod sursa (job #2500670) | Cod sursa (job #2975337) | Cod sursa (job #2455215)
// ============================================================================
#include <iostream>
#include <fstream>
// ============================================================================
#define zeros(x) ((x^(x-1)&x))
// ============================================================================
using namespace std;
// ============================================================================
ofstream fout ("datorii.out");
ifstream fin ("datorii.in");
// ============================================================================
void adauga_datorie (int zi, int datorie);
void plata (int zi, int suma);
int rest_plata (int zis);
// ============================================================================
int datorii [15002];
int n, m;
// ============================================================================
int main (void)
{
// ------------------------------------------------------------------------
bool tip;
int zi, suma;
int zis, zif;
// ------------------------------------------------------------------------
// Initial file read.
fin >> n >> m;
for (zi = 1; zi <= n; zi++)
{
fin >> suma;
adauga_datorie (zi, suma);
}
// ------------------------------------------------------------------------
// Reading and processing the rest of the file.
for (int operatiune = 0; operatiune < m; operatiune++)
{
fin >> tip;
if (tip == false)
{
fin >> zi >> suma;
plata (zi, suma);
}
else
{
fin >> zis >> zif;
suma = rest_plata (zif) - rest_plata (zis - 1);
fout << suma << endl;
}
}
// ------------------------------------------------------------------------
return 0;
}
// ============================================================================
void adauga_datorie (int zi, int datorie)
{
for (int i = zi; i <= n; i += zeros (i))
{
datorii [i] += datorie;
}
}
// ============================================================================
void plata (int zi, int suma)
{
for (int i = zi; i <= n; i += zeros (i))
{
datorii [i] -= suma;
}
}
// ============================================================================
int rest_plata (int zi_start)
{
int plata = 0;
for (int zi = zi_start; zi > 0; zi -= zeros (zi))
{
plata += datorii [zi];
}
return plata;
}
// ============================================================================