Pagini recente » Cod sursa (job #876295) | Cod sursa (job #677703) | Cod sursa (job #1933050) | Cod sursa (job #995702) | Cod sursa (job #1371541)
#include <fstream>
using namespace std;
ifstream is("aib.in");
ofstream os("aib.out");
int n, m, a[100001];
int type;
int position1, value, position2;
void Update(int pos, int val);
int Query(int pos);
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
{
is >> value;
Update(i, value);
}
for ( int i = 1; i <= m; ++i )
{
is >> type;
if ( !type )
{
is >> position1 >> value;
Update(position1, value);
}
if ( type == 1 )
{
is >> position1 >> position2;
os << Query(position2) - Query(position1 - 1) << '\n';
}
if ( type == 2 )
{
is >> value;
int byte;
for ( byte = 1; byte < n; byte <<= 1 );
for ( int pos = 0; byte; byte >>= 1 )
if ( pos + byte <= n && a[pos + byte] <= value )
{
pos += byte;
value -= a[pos];
if ( !value )
{
if ( !pos )
os << "-1\n";
else
os << pos << '\n';
break;
}
}
if ( value )
os << "-1\n";
}
}
is.close();
os.close();
return 0;
}
void Update(int pos, int val)
{
for ( int i = pos; i <= n; i += i & -i )
a[i] += val;
}
int Query(int pos)
{
int s = 0;
for ( int i = pos ; i; i -= i & -i )
s += a[i];
return s;
}