Pagini recente » Cod sursa (job #1359541) | Cod sursa (job #644887) | Cod sursa (job #969855) | Cod sursa (job #2130761) | Cod sursa (job #670047)
Cod sursa(job #670047)
# include <fstream>
# define dim 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int arb[ dim ];
int n, m;
inline int zero( int x )
{
return x & -x;
}
inline void insert( int var, int poz )
{
int i;
for ( i = poz ; i <= n ; i = i + zero( i ) )
arb[ i ] = arb[ i ] + var;
}
inline void det( int x, int y )
{
int suma_a = 0, suma_b = 0, i;
for ( i = y ; i >= 1 ; i = i - zero( i ) )
suma_a = suma_a + arb[ i ];
for ( i = x - 1 ; i >= 1 ; i = i - zero( i ) )
suma_b = suma_b + arb[ i ];
g << suma_a - suma_b << "\n";
}
void cauta( int x )
{
int i, ok = 1, j = 0;
for ( i = 1 ; i <= n ; i = i << 1 );
//g << i;
while( i > 0 && ok == 1 )
{
if ( i + j <= n )
if ( x >= arb[ i + j ] )
{
j = j + i;
x = x - arb[ j ];
if ( x == 0 )
ok = 0;
}
i = i >> 1;
}
if ( ok == 0 )
g << j << "\n";
else
g << -1 << "\n";
}
inline void citire()
{
int i, x, y, var;
f >> n >> m;
for ( i = 1 ; i <= n ; i++ )
{
f >> x;
insert( x, i );
}
for ( i = 1 ; i <= m ; i++ )
{
f >> var;
if ( var == 0 )
{
f >> x >> y;
insert( y, x );
}
else
if ( var == 1 )
{
f >> x >> y;
det( x, y ) ;
}
else
if ( var == 2 )
{
f >> x;
cauta( x );
}
}
}
int main()
{
citire();
return 0;
}