Pagini recente » Cod sursa (job #2535079) | Cod sursa (job #1790561) | Cod sursa (job #465813) | Cod sursa (job #1646356) | Cod sursa (job #2327418)
#include <iostream>
#include <fstream>
#define p2(x) (x & -x)
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 100005;
const int INF = (1<<29);
int v[NMAX];
int n;
void Completare(int poz,int x)
{
for(int i=poz;i<=n;i+=p2(i)) v[i]+=x;
}
int Suma(int poz)
{
int sum=0;
for(int i=poz;i>=1;i-=p2(i)) sum+=v[i];
return sum;
}
int Cautare(int sum)
{
int poz=INF;
int ind=0;
int k=0;
while(poz!=0)
{
if(ind+poz<=n)
{
if(k+v[ind+poz]<=sum)
{
ind+=poz;
k+=v[ind];
if(k==sum) return ind;
}
}
poz/=2;
}
return -1;
}
int main()
{
int m;
fin >> n >> m;
int x;
for(int i=1;i<=n;i++)
{
fin >> x;
Completare(i,x);
}
int tip,a,b;
for(int i=1;i<=m;i++)
{
fin >> tip;
if(tip<2) fin >> a >> b;
if(tip==0)
{
Completare(a,b);
}
else if(tip==1)
{
fout << Suma(b) - Suma(a-1) << '\n';
}
else if(tip==2)
{
fin >> a;
fout << Cautare(a) << '\n';
}
}
return 0;
}