Pagini recente » Cod sursa (job #800695) | Cod sursa (job #537896) | Cod sursa (job #2438233) | Cod sursa (job #3196917) | Cod sursa (job #1434613)
#include <iostream>
#include <fstream>
#define lli long long int
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int N;
int v[100003];
inline int formula_inventata_de_mine(int poz)
{
return (poz - ( poz & (poz-1) ) );
}
int formula_lor(int poz)
{
return (poz & -poz);
}
void modifica(int poz,int val)
{
while( poz <= N )
{
v[poz] +=val;
poz += formula_inventata_de_mine(poz);
}
}
lli suma( int poz )
{
lli s = 0;
while( poz > 0 )
{
s += v[poz];
poz -= formula_inventata_de_mine(poz);
}
return s;
}
int minim(int val)
{
int l = 1,r = N;
int mij;
while( l<=r )
{
mij = (l+r)/2;
if(suma(mij) == val)
return mij;
else
if( suma(mij)<val)
l = mij+1;
else
r = mij-1;
}
return -1;
}
int main()
{
int M,a,b,i,op;
in >> N >> M;
for( i = 0 ; i <= N ; i ++)
v[i] = 0;
for( i = 1 ; i <= N ; i ++)
{
in >> b;
modifica(i,b);
}
while(M)
{
in >> op;
switch(op)
{
case 0 : in >> a >> b; modifica(a,b); break;
case 1 : in >> a >> b; out<<suma(b)-suma(a-1)<<"\n"; break;
case 2 : in >> a; out<<minim(a)<<"\n"; break;
}
M--;
}
return 0;
}