Pagini recente » Cod sursa (job #1797788) | Cod sursa (job #2045396) | Cod sursa (job #876987) | Istoria paginii runda/siht-hpeapns | Cod sursa (job #1990261)
#include <fstream>
using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
int a[100001],n;
int Query(int poz)
{
int s=0;
for (int i=poz;i>=1;i -= i & -i)
s += a[i];
return s;
}
void Update(int poz, int v)
{
for (int i=poz;i<=n; i += i & -i )
a[i] += v;
}
int Search(int p,int u,int x)
{
int m;
while (p<u)
{
m=(p+u)/2;
int nr=Query(m);
if (nr < x) p=m+1;
if (nr >= x) u=m;
}
m=(p+u)/2;
if(Query(m) < x) m++;
return m;
}
int main()
{
int v, m;
fi >> n >> m;
for ( int i = 1; i <= n; ++i )
{
fi >> v;
Update(i, v);
}
int c, p1, p2, x;
for ( int i = 1; i <= m; ++i )
{
fi >> c;
if ( c==0 )
{
fi >> p1 >> v;
Update(p1, v);
}
if (c==1)
{
fi >> p1 >> p2;
fo << Query(p2) - Query(p1 - 1) << '\n';
}
if (c==2)
{
fi>>x;
int sol=Search(1,n,x);
if(Query(sol)==x) fo<<sol<<'\n';
else fo<<"-1";
}
}
return 0;
}