Pagini recente » Cod sursa (job #1966554) | Cod sursa (job #3164869) | Cod sursa (job #58804) | Cod sursa (job #302055) | Cod sursa (job #1248924)
#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 Query(int pos);
void Update(int pos, int val);
int 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 << Query(b) - Query(a-1) << '\n';
}
if ( x == 2 )
{
fin >> a;
fout << Search(a) << '\n';
}
}
fin.close();
fout.close();
return 0;
}
void Update(int pos, int val)
{
for (int x = pos; x <= n; x += x & -x)
aib[x] += val;
}
int Query(int pos)
{
int suma = 0;
for ( int x = pos; x; x -= x & -x)
suma += aib[x];
return suma;
}
int Search( int v )
{
int i = 0, p;
for ( p = 1; p < n; p <<= 1);
for ( ; p; p >>= 1)
if ( i + p <= n && aib[i + p] < v )
i += p;
if ( aib[i+1] == v )
return i + 1;
else
return -1;
}