Pagini recente » Cod sursa (job #683479) | Cod sursa (job #726796) | Cod sursa (job #132760) | Cod sursa (job #3176906) | Cod sursa (job #2874879)
#include <fstream>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
int aib[100005];
void update(int p, int x, int n)
{
for(int i = p; i <= n; i += (i&(-i)))
aib[i] += x;
}
int sum (int p)
{
int ans = 0;
for(int i = p; i >= 1; i -= (i&(-i)))
ans += aib[i];
return ans;
}
int binar (int x, int n)
{
int a = 1, b = n;
while(a <= b)
{
int k = (a + b) / 2;
if(sum(k) == x)
return k;
if(sum(k) < x)
a = k + 1;
if(sum(k) > x)
b = k - 1;
}
return -1;
}
int main()
{
int n, m, x, c, a, b;
in >> n >> m;
for(int i = 1; i <= n; i ++)
{
in >> x;
update(i, x, n);
}
for(int i = 1; i<= n; i ++)
out << aib[i] << " ";
out << '\n';
for(int i = 1; i <= m; i++)
{
in >> c;
if(c == 0)
{
in >> a >> b;
update(a, b, n);
}
else if(c == 1)
{
in >> a >> b;
out << sum(b) - sum(a - 1) << '\n';
}
else
{
in >> x;
out << binar(x, n) << '\n';
}
}
return 0;
}