Pagini recente » Cod sursa (job #1724360) | Cod sursa (job #2678092) | Cod sursa (job #1431333) | Cod sursa (job #2616869) | Cod sursa (job #1711631)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,aib[100005],i,x,a,b,M,q;
void up(int poz,int val)
{
for(int i=poz;i<=N;i+=(i&(-i)))
{
aib[i]+=val;
}
}
int Q(int poz)
{
int sum=0;
for(int i=poz;i;i-=(i&(-i)))
{
sum+=aib[i];
}
return sum;
}
int main()
{
fin>>N>>M;
for(i=1;i<=N;i++)
{
fin>>x;
up(i,x);
}
for(i=1;i<=M;i++)
{
fin>>q;
switch(q)
{
case 0:
fin>>a>>b;
up(a,b);
break;
case 1:
fin>>a>>b;
fout<<Q(b)-Q(a-1)<<"\n";
break;
case 2:
fin>>a;
int l=1,r=N,mid,sol=-1;
while(l<=r)
{
mid=(l+r)/2;
int C=Q(mid);
if(C==a)
{
sol=mid;
r=mid-1;
}
else
{
if(C<a)
{
l=mid+1;
}
else
{
r=mid-1;
}
}
}
fout<<sol<<"\n";
break;
}
}
return 0;
}