Pagini recente » Cod sursa (job #51895) | Cod sursa (job #2147875) | Cod sursa (job #1464141) | Cod sursa (job #51604) | Cod sursa (job #2199912)
#include <fstream>
using namespace std;
#define lsb(a) a&(-a)
ifstream cin("aib.in");
ofstream cout("aib.out");
long long x, p, n, v[100000];
void adg() {
while (p <= n) {
v[p] += x;
p += lsb(p);
}
}
long long sum(long long pz) {
long long ans(0);
while (pz > 0) {
ans += v[pz];
pz -= lsb(pz);
}
return ans;
}
long long cb(long long val) {
long long pas = 1<<16, r = 0;
while (pas > 0) {
if (r + pas <= n && sum(r + pas) <= val) {
r += pas;
}
pas >>= 1;/// 0 dak !E solutieh
}/// \/
return (((r + 1) * (int)(sum(r) == val)) - 1);
}
int main()
{
long long m, a, b, s, c;
cin >> n >> m;
for (long long i = 1; i <= n; ++i) {
cin >> x;
p = i;
adg();
}
for (long long i = 0; i < m; ++i) {
cin >> c;
if (c == 0) {
cin >> p >> x;
adg();
}
if (c == 1) {
cin >> a >> b;
cout << sum(b) - sum(a - 1) << "\n";
}
if (c == 2) {
cin >> s;
cout << cb(s) << "\n";
}
}
return 0;
}