Mai intai trebuie sa te autentifici.
Cod sursa(job #651714)
Utilizator | Data | 21 decembrie 2011 10:21:57 | |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.78 kb |
#include<fstream>
#include<iostream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
long AIB[100],v[100],N;
void Add(int x, int quantity)
{
int i;
for (i = x; i <= N; i += zeros(i))
AIB[i] += quantity;
}
int Compute(int x)
{
int i, ret = 0;
for (i = x; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int main()
{
int M,i,x,y,op;
ifstream intrare;
intrare.open("datorii.in");
ofstream iesire;
iesire.open("datorii.out");
intrare >> N >> M;
for(i=0;i<=N;i++)
{
v[i]=0;
AIB[i]=0;
}
for (i = 1; i<=N; i++)
{
intrare >> v[i];
Add(i,v[i]);
}
for (i=0; i<M ;i ++)
{
intrare >> op >> x >> y;
cout<<x<<" "<<y<<endl;
if (op == 0)
Add ( x, -y);
if (op ==1)
iesire << (Compute(y) - Compute (x-1))<<endl;
}
intrare.close();
iesire.close();
return 0;
}