Pagini recente » Cod sursa (job #2350563) | Cod sursa (job #1070790) | Cod sursa (job #2677284) | Cod sursa (job #2351620) | Cod sursa (job #1498898)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int v[NMAX],aib[NMAX],n,m,t,a,b;
int bit(int x)
{
return x&(-x);
}
void citire()
{
in >> n >> m;
for(int i=1;i<=n;i++)
{
in >> v[i];
}
}
void update(int i,int delta)
{
for(;i<=n;i+=bit(i))
aib[i]+=delta;
}
int sum(int i)
{
int suma = 0;
for(;i>0;i-=bit(i))
suma = suma + aib[i];
return suma;
}
int bin(int x)
{
int st =1,dr=n,mij,s;
while(st<=dr)
{
mij=(st+dr)/2;
s = sum(mij);
if(s==x) return mij;
else if(s < x)
st = mij+1;
else if(s>x) dr = mij-1;
}
return -1;
}
int s;
int main()
{
citire();
for(int i=1;i<=n;i++)
update(i,v[i]);
for(int i=0;i<m;i++){
in >> t;
if(t==0)
{
in >> a >> b;
update(a,b);
}
else if(t==1)
{
in >> a >> b;
s = 0;
s = sum(b) - sum(a-1);
out << s << "\n";
}
else
{
in >> a;
out << bin(a) << "\n";
}
}
return 0;
}