Pagini recente » Cod sursa (job #726705) | Cod sursa (job #2488543) | Cod sursa (job #2131490) | Cod sursa (job #478932) | Cod sursa (job #1805810)
#include<fstream>
#include<iostream>
#define MAX 100002
using namespace std;
fstream fin("aib.in",ios::in),fout("aib.out",ios::out);
int x[MAX],n;
void scrie(int x[], int n)
{
for(int i=1;i<=n;i++)
{
cout<<x[i]<<" ";
}
cout<<endl;
}
void update(int poz, int val)
{
while (poz<=n)
{
x[poz]+=val;
poz=poz+(poz&-poz);
}
}
int query(int poz)
{
int s=0;
while(poz>0)
{
s+=x[poz];
poz=poz-(poz&-poz);
}
return s;
}
int find(int s)
{
int st=1,dr=n,m,aux;
while(st<=dr)
{
m=(st+dr)/2;
aux=query(m);
if(aux==s)
return m;
if(aux<s)
st=m+1;
else
dr=m-1;
}
return -1;
}
int main()
{
int q,a,i,d,j,p,m,b;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a;
update(i,a);
}
for(i=1;i<=m;i++)
{
fin>>q;
if(q==0)
{
fin>>a>>b;
update(a,b);
}
if(q==1)
{
fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
}
if(q==2)
{
fin>>a;
fout<<find(a)<<"\n";
}
}
}