Pagini recente » Cod sursa (job #1970777) | Borderou de evaluare (job #2007108) | Borderou de evaluare (job #3195890) | Borderou de evaluare (job #3213729) | Cod sursa (job #3231604)
#include <fstream>
#include <algorithm>
#define lsb(a) (a&(-a))
#define MOD 1000000007
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, q, x;
long long aib[100010];
long long detval(int x)
{
long long sum=0;
for(int j=x; j>=1; j-=lsb(j))
sum+=aib[j];
return sum;
}
int main()
{
fin>>n>>q;
for(int i=1; i<=n; i++)
{
fin>>x;
for(int j=i; j<=n; j+=lsb(j))
{
aib[j]+=x;
}
}
/*for(int i=1; i<=n; i++)
fout<<aib[i]<<' ';*/
int cd, a, b;
for(int i=1; i<=q; i++)
{
fin>>cd;
switch (cd)
{
case 0:
fin>>a>>b;
for(int j=a; j<=n; j+=lsb(j))
aib[j]+=b;
break;
case 1:
fin>>a>>b;
fout<<detval(b)-detval(a-1)<<'\n';
break;
case 2:
fin>>a;
int st=1, dr=n, mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(detval(mij)>=1ll*a)
dr=mij-1;
else
st=mij+1;
}
fout<<st<<'\n';
break;
}
}
return 0;
}