Pagini recente » Cod sursa (job #679669) | Cod sursa (job #2658327) | Cod sursa (job #729467) | Cod sursa (job #3158407) | Cod sursa (job #2312610)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 15001;
const int M = 100001;
int AI[M], *v, n, x, y, m;
void Create (int poz, int st, int dr)
{
if(st == dr)
{
AI[poz] = v[st];
return;
}
int m = ( st + dr ) / 2;
Create(2 * poz, st, m);
Create(2 * poz + 1, m + 1, dr);
// if(v[AI[2 * x]] > v[AI[2 * x + 1]])
// AI[x] = AI[2 * x + 1];
// else
// AI[x] = AI[2 * x ];
AI[poz] = AI[2 * poz] + AI[2 * poz + 1];
}
void Update ( int st, int dr, int poz )
{
if(st == dr)
{
AI[poz] -= y;
return;
}
int m = (st + dr) / 2;
if(x <= m)
Update( st, m, 2 * poz);
else
Update( m + 1, dr, 2 * poz + 1);
AI[poz] = AI[2 * poz] + AI[2 * poz + 1];
}
void Query(int poz, int st, int dr, int &sol)
{
if(x <= st && dr <= y)
{
sol += AI[poz];
return;
}
int m = (st + dr) / 2;
if(x <= m)
Query(2 * poz, st, m, sol);
if(y > m)
Query(2 * poz +1, m + 1, dr, sol);
}
int main()
{
int i, task, sol;
ifstream in ("datorii.in");
ofstream out ("datorii.out");
in >> n >> m;
v = new int [n + 1];
for( i = 1; i <= n; i++ )
in >> v[i];
Create(1, 1, n);
for ( i = 0; i < m ; i++ )
{
in >> task >> x >> y;
if(task == 0)
Update( 1, n, 1);
else
{
sol = 0;
Query(1, 1, n, sol);
out << sol << "\n";
}
}
in.close();
out.close();
delete ( v );
return 0;
}