Pagini recente » Cod sursa (job #1145942) | Cod sursa (job #1051789) | Cod sursa (job #285001) | Cod sursa (job #974006) | Cod sursa (job #1206353)
#include <fstream>
using namespace std;
ifstream is("datorii.in");
ofstream os("datorii.out");
int N, M, x, y, z, val, P1, P2, Sum, T;
int Arb[60001];
void Update(int,int,int);
void Query(int,int,int);
int main()
{
is >> N >> M;
for ( int i = 1; i <= N; ++i )
{
is >> x;
val = x;
P1 = i;
Update(1,1,N);
}
for ( int i = 1; i <= M; ++i )
{
T = 1;
is >> z >> x >> y;
if ( z == 0 )
{
P1 = x;
val = y;
Update(1,1,N);
}
else
{
Sum = 0;
P1 = x; P2 = y;
Query(1,1,N);
os << Sum << '\n';
}
}
is.close();
os.close();
}
void Update(int node, int left, int right)
{
if ( left == right )
{
if ( T == 0 )
Arb[node] = val;
else
Arb[node] -= val;
return;
}
int mid = (left+right)/2;
if ( P1 <= mid )
Update(2*node,left,mid);
else
Update(2*node+1,mid+1,right);
Arb[node] = Arb[2*node] + Arb[2*node+1];
}
void Query(int node, int left, int right)
{
if ( left >= P1 && right <= P2 )
{
Sum += Arb[node];
return;
}
int mid = (left+right)/2;
if ( P1 <= mid )
Query(2*node,left,mid);
if ( P2 > mid )
Query(2*node+1,mid+1,right);
}