Pagini recente » Cod sursa (job #2706667) | Cod sursa (job #223677) | Cod sursa (job #2547560) | Cod sursa (job #2565743) | Cod sursa (job #1919806)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N, M;
int Aib[100002];
void Update(int poz, int val)
{
for (int i = poz; i <= N; i += i & -i)
Aib[i] += val;
}
int Query(int poz)
{
int ans = 0;
for (int i = poz; i > 0; i -= i & -i)
ans += Aib[i];
return ans;
}
int main()
{
f >> N >> M;
for (int i = 1; i <= N; ++i)
{
int val;
f >> val;
Update(i, val);
}
for (int i = 1; i <= M; ++i)
{
int type, a, b;
f >> type;
if (type == 0)
{
f >> a >> b;
Update(a, b);
}
if (type == 1)
{
f >> a >> b;
g << Query(b) - Query(a - 1) << "\n";
}
if (type == 2)
{
f >> a;
int st = 1, dr = N, last_good = -1;
while (st <= dr)
{
int m = (st + dr) >> 1;
int val = Query(m);
if (val > a)
dr = m - 1;
else
{
if (val == a)
last_good = m;
st = m + 1;
}
}
g << last_good << "\n";
}
}
f.close();
g.close();
return 0;
}