Pagini recente » Monitorul de evaluare | Cod sursa (job #1557945) | Profil iuliana_b | Monitorul de evaluare | Cod sursa (job #2528949)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int stinky[100002],n;
void add(int index, int a)
{
for(int i = index ; i<=n ; i = i + (i&(-i)))
sticky[i]+=a;
}
int afisare(int a, int b)
{
int suma1,suma2;
for(int i=b;i>=0;i=i-(i&(-i))
suma2+=stinky[i];
for(int i=a-1;i>=0;i=i-(i&(-i))
suma1+=stinku[i];
return suma2-suma1;
}
void minimk(int a)
{
int st=1, dr=min(a,n);
while(st<dr)
{
int mij=(st+dr)/2;
int val= afisare(1,mij);
if(val==a)
return mij;
else if(val>a)
dr=mij-1;
else
st=mmij+1;
}
return -1;
}
int main()
{
int m;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
int a;;
fin>>a;
add(i,a);
}
for(int i=0;i<m;i++)
{
int c,x,y;
fin>>c>>x>>y;
if(!c)
{
add(y,b);
}
else
if(c==1)
{
fout<<afisare(x,y)<<'\n';
}
else
if(c==2)
{
fout<<minik(x)<<'\n';
}
}
return 0;
}