Pagini recente » Cod sursa (job #2680457) | Cod sursa (job #2603970) | Cod sursa (job #2651761) | Cod sursa (job #425164) | Cod sursa (job #1250903)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int Dim = 100002;
int n, m;
int aib[Dim];
int x, a, b;
int Sum(int pos);
void Update(int pos, int val);
void Search( int v );
int main()
{
fin >> n >> m;
for ( int i = 1; i <= n; ++i )
{
fin >> x;
Update(i, x);
}
for ( ; m > 0; --m)
{
fin >> x;
if ( x == 0)
{
fin >> a >> b;
Update( a , b);
}
if ( x == 1 )
{
fin >> a >> b;
fout << Sum(b) - Sum(a-1) << '\n';
}
if ( x == 2 )
{
fin >> a;
Search(a);
}
}
fin.close();
fout.close();
return 0;
}
void Update(int pos, int val)
{
for (int i = pos; i <= n; i += i & -i)
aib[i] += val;
}
int Sum(int pos)
{
int suma = 0;
for ( int i = pos; i; i -= i & -i)
suma += aib[i];
return suma;
}
void Search( int v )
{
int st = 1, dr = n, ss, md;
do
{
md = ( st + dr ) / 2;
ss = Sum(md);
if ( ss == v )
{
fout << md << "\n";
st = n + 1;
}
else
if ( ss > v )
dr = md - 1;
else
st = md + 1;
} while ( st <= dr );
if ( st != n + 1 )
fout << "-1\n";
}