Pagini recente » Cod sursa (job #2779140) | Cod sursa (job #3128819) | Cod sursa (job #1795150) | Cod sursa (job #242401) | Cod sursa (job #1053100)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,a[100001];
void add(int pos,int val)
{
for(int i=pos;i<=n;i+=i&-i)
a[i]+=val;
}
int query(int pos)
{
int s=0,i;
for(i=pos;i>=1;i-=i&-i)
s+=a[i];
return s;
}
int bs(int val)
{
int s=1,e=n,m,sc;
while(s<=e)
{
m=(s+e)>>1;
sc=query(m);
if(sc==val)
return m;
else if(sc>val)
e=m-1;
else s=m+1;
}
return -1;
}
int main()
{
int a,b,c;
fin>>n>>m;
for(a=1;a<=n;a++)
{
fin>>b;
add(a,b);
}
while(m--)
{
fin>>c;
switch(c)
{
case 0:
fin>>a>>b;
add(a,b);
break;
case 1:
fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
break;
default:
fin>>a;
fout<<bs(a)<<"\n";
}
}
return 0;
}