Pagini recente » Cod sursa (job #2933949) | Cod sursa (job #1861140) | Cod sursa (job #1219931) | Cod sursa (job #1904942) | Cod sursa (job #1385836)
#include <fstream>
using namespace std;
ifstream is("aib.in");
ofstream os("aib.out");
void Update(int poz, int x);
int Query(int poz);
int Search(int a);
int n, m;
int aib[100005];
int val;
int op;
int main()
{
is >> n >> m;
for(int i =1; i <= n; ++i)
{
is >> val;
Update(i, val);
}
int x, y;
for(int i = 1; i <= m; ++i)
{
is >> op;
if(op == 0)
{
is >> x >> y;
Update(x, y);
}
if(op == 1)
{
is >> x >> y;
os << Query(y) - Query(x-1) << '\n';
}
if(op == 2)
{
is >> x;
os << Search(x) << '\n';
}
}
is.close();
os.close();
return 0;
}
void Update(int poz, int x)
{
for(int i = poz; i<= n; i += i & -i)
aib[i] += x;
//for(int i = 1; i <= n; ++i)
//{
// os << aib[i] << ' ';
//}
//os << '\n';
}
int Query(int poz)
{
int suma = 0;
for(int i = poz; i; i -= i & -i)
suma += aib[i];
return suma;
}
int Search(int sum)
{
if(sum == 0) return -1;
int now = 0;
for(int i = (1 << 20); i; i >>= 1)
{
if(now + i <= n && aib[now + i] <= sum)
{
now += i;
sum -= aib[now];
}
}
if (sum == 0) return now;
return -1;
}