Pagini recente » Cod sursa (job #534705) | Cod sursa (job #2056846) | Cod sursa (job #2170396) | Cod sursa (job #2172471) | Cod sursa (job #1812425)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100010],n,m,op,a,b,x;
void update(int poz, int val)
{
for(; poz<=n; poz+=((-poz)&poz))
aib[poz]+=val;
}
int sum(int poz)
{
int s=0;
for(;poz;poz-=poz&(-poz))
s+=aib[poz];
return s;
}
void srch(int k)
{
int lo=1,hi=n,mi,sc;
do{
mi=(lo+hi)/2;
sc=sum(mi);
if(sc<k)
lo=mi+1;
else
hi=mi-1;
}while(lo<hi);
mi=(lo+hi)/2;
sc=sum(mi);
if(sc==k)
fout<<mi<<'\n';
else{
if(sc<k)
fout<<mi+1<<'\n';
else
fout<<mi-1<<'\n';
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>x;
update(i,x);
}
while(m--)
{
fin>>op;
switch(op)
{
case 0:
fin>>a>>b;
update(a,b);
break;
case 1:
fin>>a>>b;
fout<<sum(b)-sum(a-1)<<'\n';
break;
case 2:
fin>>a;
srch(a);
break;
}
}
return 0;
}