Pagini recente » Cod sursa (job #1823844) | Cod sursa (job #744494) | Cod sursa (job #1657214) | Cod sursa (job #1087201) | Cod sursa (job #1397461)
#include <fstream>
using namespace std;
#define DIM 15010
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int Arb[DIM*4],i,j,n,m,v[DIM],x,y,q,ans;
void _Build(int nod, int left, int right)
{
if( left == right )
{
Arb[ nod ] = v[ left ];
return;
}
int middle = ( left + right ) / 2;
_Build( 2 * nod , left , middle );
_Build( 2 * nod + 1 , middle + 1 , right );
Arb[ nod ] = Arb[ 2 * nod ] + Arb[ 2 * nod + 1 ];
}
void _Update(int nod, int left, int right)
{
if( left == right )
{
Arb[ nod ] -= y;
return;
}
int middle = ( left + right ) / 2;
if( y <= middle )
_Update( 2 * nod , left , middle );
else
_Update( 2 * nod + 1 , middle + 1 , right);
Arb[ nod ] = Arb[ 2 * nod ] + Arb[ 2 * nod + 1 ];
}
void _Query(int nod, int left, int right)
{
if( left >= x && right <= y )
{
ans += Arb[ nod ];
return;
}
if( left > y || right < x )
return;
int middle = ( left + right ) / 2;
_Query( 2 * nod , left , middle );
_Query( 2 * nod + 1 , middle + 1 , right);
}
int main()
{
fin>>n>>m;
for(i=1 ; i<=n ; ++i)
fin>>v[i];
_Build(1 , 1 , n);
for(i=1 ; i<=m ; ++i)
{
fin>>q>>x>>y;
if( q == 0 )
_Update( 1 , 1 , n );
else
{
ans = 0;
_Query( 1 , 1 , n );
fout<<ans<<'\n';
}
}
return 0;
}