Pagini recente » Cod sursa (job #937625) | Cod sursa (job #1658819) | Cod sursa (job #2053722) | Cod sursa (job #236805) | Cod sursa (job #2041669)
#include <iostream>
#include <fstream>
using namespace std;
int x, i, j, n, m, act, a, b, st, dr, mid;
int aib[100001];
ifstream f("aib.in");
ofstream g("aib.out");
void add(int p, int x)
{
for (i=p; i<=n; i+=(p&(-p))) aib[i]+=x;
}
int sum(int p)
{
int s=0;
for (i=p; i>0; i-=(p&(-p))) s+=aib[p];
return s;
}
int main()
{
f>>n>>m;
for (i=1; i<=n; i++)
{
f>>x;
add(i, x);
}
//for (i=1; i<=n; i++)
// g<<aib[i]<<" ";
for (i=1; i<=m; i++)
{
f>>act;
if (act==0)
{
f>>a>>b;
add (a, b);
}
if (act==1)
{
f>>a>>b;
g<<sum(b)-sum(a-1)<<endl;
}
if (act==2)
{
st=1;
dr=n;
while(st<dr)
{
mid=(st+dr)/2;
if(sum(mid)>=a)
{
dr=mid-1;
}
else
{
st=mid+1;
}
}
if(sum(st)==a)
{
g<<st<<endl;
}
else
{
g<<"-1"<<endl;
}
}
}
}