Pagini recente » Cod sursa (job #1685950) | Cod sursa (job #1946906) | Cod sursa (job #1447731) | Cod sursa (job #2366568) | Cod sursa (job #1668189)
#include <iostream>
#include <fstream>
using namespace std;
#define zeros(x) ((x^(x-1))&x)
ifstream fin("aib.in");
ofstream fout("aib.out");
int abi[100],n,m,x,t;
void adauga(int ind,int val)
{
for(int i=ind; i<=n; i+=zeros(i))
abi[i]+=val;
}
int sum(int st,int dr)
{
int sa=0,sb=0;
for(int i=st-1; i>0; i-=zeros(i))
sa=sa+abi[i];
for(int i=dr; i>0; i-=zeros(i))
sb=sb+abi[i];
return sb-sa;
}
int cauta(int val)
{
for(int i=1; i<=n; i=i<<1)
if(val==abi[i])
return i;
return -1;
}
int main()
{
fin>>n>>m;
int i,ind,val,st,dr;
for(i=1; i<=n; i++)
{
fin>>x;
adauga(i,x);
}
for(i=1; i<=m; i++)
{
fin>>t;
if(t==0)
{
fin>>ind>>val;
adauga(ind,val);
}
else if(t==1)
{
fin>>st>>dr;
fout<<sum(st,dr)<<'\n';
}
else if(t==2)
{
fin>>val;
fout<<cauta(val)<<'\n';
}
}
return 0;
}