Pagini recente » Cod sursa (job #1134892) | Cod sursa (job #217079) | Cod sursa (job #1804484) | Cod sursa (job #1350502) | Cod sursa (job #1248827)
#include <fstream>
using namespace std;
ifstream is("aib.in");
ofstream os("aib.out");
int n, m, x, y, z;
int c[100001];
int st, dr, md, ss;
void ADD(int a, int b);
int SUM(int a);
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
{
is >> x;
ADD(i, x);
}
while ( m-- )
{
is >> x >> y;
if ( x < 2 )
{
is >> z;
if ( x )
os << SUM(z) - SUM(y - 1) << "\n";
else
ADD(y, z);
}
else
{
st = 1, dr = n;
do
{
md = ( st + dr ) / 2;
ss = SUM(md);
if ( ss == y )
{
os << md << "\n";
st = dr + 1;
}
else
if ( ss > y )
dr = md - 1;
else
st = md + 1;
} while ( st <= dr );
}
}
is.close();
os.close();
return 0;
}
void ADD(int a, int b)
{
for ( int i = a; i <= n; i += i & -i )
c[i] += b;
}
int SUM(int a)
{
int s = 0;
for ( int i = a; i; i -= i & -i )
s += c[i];
return s;
}