Pagini recente » Cod sursa (job #187900) | Cod sursa (job #801575) | Cod sursa (job #492781) | Cod sursa (job #2243020) | Cod sursa (job #173930)
Cod sursa(job #173930)
#include <fstream>
using namespace std;
const char iname[] = "aib.in";
const char oname[] = "aib.out";
#define FOR(i, a, b) for (int i = (a); i <= (b); ++ i)
#define MAXN 100005
#define ultbit(i) i & ~(i - 1)
int main(void)
{
ifstream fin(iname);
ofstream fout(oname);
int n, cnt, A[MAXN] = {0};
fin >> n >> cnt;
FOR (i, 1, n) {
int val, p = i;
fin >> val;
while (p <= n)
A[p] += val, p += ultbit(p);
}
for (; cnt > 0; -- cnt)
{
int type;
fin >> type;
if (type == 0)
{
int p, val;
fin >> p >> val;
while (p <= n)
A[p] += val, p += ultbit(p);
} else if (type == 1) {
int a, b;
fin >> a >> b;
int sum = 0;
while (b > 0)
sum += A[b], b -= ultbit(b);
a --;
while (a > 0)
sum -= A[a], a -= ultbit(a);
fout << sum <<'\n';
} else if (type == 2) {
int X;
fin >> X;
int i = 0, sum = 0;
int w = 1 << 20;
while (w > 0)
{
if (i + w <= n && sum + A[i + w] <= X)
sum += A[i + w],
i += w;
w >>= 1;
}
if (sum == X && X)
fout << i <<'\n';
else
fout << -1 <<'\n';
}
}
fin.close(), fout.close();
return 0;
}