Pagini recente » Cod sursa (job #2858452) | Cod sursa (job #975498) | Cod sursa (job #2342904) | Cod sursa (job #2928781) | Cod sursa (job #3231632)
#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;
}
}
aib[n+1]=999999;
/*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 sum=0, pos=1, lv=0;
while(sum<a)
{
for(pos=1; (pos<<1)<=n && (pos<lsb(lv) || lv==0) && sum+aib[(pos<<1)+lv]<=a; pos=(pos<<1));
sum+=aib[pos+lv];
//fout<<pos<<' ';
lv+=pos;
}
fout<<lv<<'\n';
break;
}
}
return 0;
}