Pagini recente » Cod sursa (job #2852949) | Cod sursa (job #1662784) | Cod sursa (job #2002161) | Cod sursa (job #706041) | Cod sursa (job #1589899)
#include <fstream>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
ifstream is("aib.in");
ofstream os("aib.out");
using VI = vector<int>;
using VVI = vector<VI>;
int n, m;
VI a;
void Read();
void Update(int poz, int val);
int Sum(int poz);
int main()
{
Read();
int tip, x, y;
while ( m-- )
{
is >> tip >> x;
if ( tip == 2 )
{
int s, st = 1, dr = n, md;
while ( st <= dr )
{
md = ( st + dr ) / 2;
s = Sum(md);
if ( s == x )
st = dr + 1;
else
if ( s > x )
dr = md - 1;
else
st = md + 1;
}
if ( s == x )
os << md << "\n";
else
os << "-1\n";
}
else
{
is >> y;
if ( !tip )
Update(x, y);
else
os << Sum(y) - Sum(x - 1) << "\n";
}
}
is.close();
os.close();
return 0;
}
void Read()
{
is >> n >> m;
a = VI(n + 1);
int x;
for ( int i = 1; i <= n; ++i )
{
is >> x;
Update(i, x);
}
}
void Update(int poz, int val)
{
for ( int i = poz; i <= n; i += i & -i )
a[i] += val;
}
int Sum(int poz)
{
int s = 0;
for ( int i = poz; i; i -= i & -i )
s += a[i];
return s;
}