Pagini recente » Cod sursa (job #1331429) | Cod sursa (job #2929386) | Cod sursa (job #2556571) | Cod sursa (job #1914904) | Cod sursa (job #2982621)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n, q, a[100010];
void upd(int p, int val)
{
for (int i = p; i <= n; i += i & (-i))
a[i] += val;
}
int sum(int poz)
{
int val = 0;
for (int i = poz; i > 0; i -= i & (-i))
val += a[i];
return val;
}
int main()
{
in >> n >> q;
for (int i = 1; i <= n; i++)
{
int x;
in >> x;
upd(i,x);
}
for (int i = 1; i <= q; i++)
{
int tip;
in >> tip;
if (tip == 0)
{
int poz,val;
in >> poz >> val;
upd(poz, val);
}
if (tip == 1)
{
int st,dr;
in >> st>>dr;
out<<sum(dr)-sum(st-1)<<'\n';
}
if (tip == 2)
{
int s;
in>>s;
int lo = 0, hi = n,mi;
while (hi - lo > 1)
{
mi = (lo + hi) / 2;
if (sum(mi) < s)
lo = mi;
else
hi = mi;
}
if (sum(hi) == s)
out << hi << '\n';
else
out << "-1\n";
}
}
return 0;
}