Pagini recente » Cod sursa (job #377253) | Cod sursa (job #2769985) | Cod sursa (job #3249617) | Cod sursa (job #2153763) | Cod sursa (job #2323431)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100001];
int n,m;
void introduce(int v,int poz)
{
while(poz<=n)
{
aib[poz]+=v;
poz=poz+(poz&(-poz));
}
}
int f(int poz)
{
int rez=0;
while(poz>0)
{
rez+=aib[poz];
poz=poz-(poz&(-poz));
}
return rez;
}
int suma(int st,int dr)
{
return f(dr)-f(st-1);
}
int cautbin(int a)
{
for(int i=1;i<=n;i++)
if(suma(1,i)==a)
return i;
return -1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
int a;
fin>>a;
introduce(a,i);
}
for(int i=1;i<=m;i++)
{
int t;
fin>>t;
if(t==0)
{
int a,b;
fin>>a>>b;
introduce(b,a);
}
if(t==1)
{
int a,b;
fin>>a>>b;
fout<<suma(a,b)<<"\n";
}
if(t==2)
{
int a;
fin>>a;
fout<<cautbin(a)<<"\n";
}
}
return 0;
}