Pagini recente » Cod sursa (job #2321822) | Cod sursa (job #1265780) | Diferente pentru schimbare-borland/argumentatie intre reviziile 17 si 18 | Cod sursa (job #1157592) | Cod sursa (job #2681052)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
long long n,m,x,v[100010],a,b;
long long suma(long long poz)
{
long long r=0;
for(;poz>=1;poz-=poz&(-poz))
r+=v[poz];
return r;
}
void adn(long long a,long long b)
{
for(;a<=n;a+=a&(-a))
v[a]+=b;
return;
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;++i)
{
in>>x;
v[i]=x+suma(i-1)-suma(i-(i&(-i)));
}
for(int y=1;y<=m;++y)
{
in>>x;
if(x==0)
{
in>>a>>b;
adn(a,b);
}
if(x==1)
{
in>>a>>b;
out<<suma(b)-suma(a-1)<<'\n';
}
if(x==2)
{
in>>a;
long long b=1,e=n,m;
while(b<=e)
{
m=(b+e)/2;
if(suma(m)>=a)
e=m-1;
else
b=m+1;
}
if(suma(b)==a)
out<<b<<'\n';
else
out<<-1<<'\n';
}
}
return 0;
}