Pagini recente » Cod sursa (job #274445) | Cod sursa (job #2593994) | Cod sursa (job #633476) | Cod sursa (job #2570159) | Cod sursa (job #2529520)
#include <iostream>
#include <fstream>
#define MAXN 100005
using namespace std;
int aib[MAXN];
int n,m;
ifstream fin("aib.in");
ofstream fout("aib.out");
int nrZerouri(int x)
{
return (x&(-x));
}
void adaugare(int valoare, int poz)
{
int pozitie=poz;
while(pozitie<=n)
{
aib[pozitie]+=valoare;
pozitie+=nrZerouri(pozitie);
}
}
long long int suma(int x)
{
long long int s=0;
for(int i=x;i>0;i-=nrZerouri(i))
s+=aib[i];
return s;
}
long long int s(int x, int y)
{
return suma(y)-suma(x-1);
}
//int cautbin(int val)
//{
// int st=1, dr=n;
// while(st<=dr)
// {
// int mij=(st+dr)/2;
// if(aib[mij]==val)
// return mij;
// if(aib[mij]<val)
// st=mij+1;
// else
// dr=mij;
// }
// return -1;
//}
void citire()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
adaugare(x,i);
}
int op;
for(int i=0;i<m;i++)
{
fin>>op;
if(op==0)
{
int x,y;
fin>>x>>y;
adaugare(y,x);
}
if(op==1)
{
int x,y;
fin>>x>>y;
fout<<s(x,y)<<"\n";
}
if(op==2)
{
int x;
fin>>x;
fout<<"\n";
}
}
}
int main()
{
citire();
return 0;
}