Pagini recente » Cod sursa (job #2696335) | Cod sursa (job #2695260) | Cod sursa (job #558100) | Cod sursa (job #1150492) | Cod sursa (job #825597)
Cod sursa(job #825597)
#include <fstream>
#include <cstdlib>
#define MAX_SIZE 15000
using namespace std;
ifstream input("datorii.in");
ofstream output("datorii.out");
int arb[MAX_SIZE * 3];
int sume[MAX_SIZE+1];
int sum = 0;
void update_tree(int nod , int value , int pozition , int left , int right)
{
if (left == right)
{
arb[nod] = value;
return ;
}
int middle = (left + right) / 2;
if (pozition<= middle) update_tree(2*nod , value ,pozition , left,middle);
else update_tree(2*nod+1 , value , pozition , middle+1 , right);
arb[nod] = arb[2 * nod] + arb[ 2 * nod + 1];
}
void query_tree(int nod , int P , int Q , int left , int right)
{
if ( P <= left && Q >= right )
{
sum += arb[nod];
return;
}
int middle = (left + right) / 2;
if (P <= middle) query_tree(2*nod , P , Q , left , middle);
if (Q > middle) query_tree(2*nod + 1 , P , Q , middle + 1 , right);
}
int main()
{
int N , Queries;
input >> N >> Queries;
for (int i = 1 ;i <= N ; i++)
{
int x;
input >> x;
sume[i] = x;
update_tree(1,x,i,1,N);
}
for (int i = 0 ;i < Queries;i++)
{
int x;
input >> x;
if (x == 0)
{
int poz;
int T;
input >> poz >> T;
sume[poz] -= T;
update_tree(1,sume[poz],poz,1,N);
}
if (x == 1)
{
int P;
int Q;
input >> P >> Q;
sum = 0;
query_tree(1,P,Q,1,N);
output << sum << "\n";
}
}
input.close();
output.close();
return 0;
}