Pagini recente » Cod sursa (job #2092066) | Cod sursa (job #2485496) | Cod sursa (job #889160) | Cod sursa (job #1118636) | Cod sursa (job #2544697)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
long aib[100005];
long long n,i,j,m,x,dr;
int ub (int x)
{
return x&(-x);
}
int add (int poz ,int val)
{
int i;
for (int i=poz;i<=n;i+=ub(i))
{
aib[i]+=val;
}
}
long sum (int poz)
{
int s=0;
for(int i=poz;i>=1;i-=ub(i))
{
s=s+aib[i];
}
return s;
}
int c_bin(int k)
{
int st=1,dr=n,mij=0;
while(st<=dr)
{mij=(st+dr)/2;
if(k<=sum(mij))dr=mij-1;
else st=mij+1;
}
return st;
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
{in>>x;
add(i,x);
}
int t;
int a,b,k;
for(i=1;i<=m;i++)
{
in>>t;
if(t==0){in>>a>>b; add(a,b); }
if(t==1){in>>a>>b;out<<sum(b)-sum(a-1)<<"\n";}
if(t==2){in>>k; out<<c_bin(k)<<"\n";
}
}
return 0;
}