Pagini recente » Cod sursa (job #1367145) | Cod sursa (job #2274444) | Cod sursa (job #1828295) | Cod sursa (job #317033) | Cod sursa (job #2019603)
#include <fstream>
#define ub(x) (x&(-x))
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N, M, AIB[100003];
void add(int poz, int val) {
for(int i = poz; i <= N; i += ub(i)) AIB[i] += val;
}
int sum(int poz) {
int s = 0;
for(int i = poz; i > 0; i -= ub(i))
s += AIB[i];
return s;
}
int cautbin(int x) {
int st = 1, dr = N, ans = -1, mij = 0;
while(st <= dr) {
mij = (st + dr) / 2;
int nr = sum(mij);
if(nr == x) {
ans = mij;
break;
}
else if(nr < x) st = mij + 1;
else dr = mij - 1;
}
return ans;
}
int main()
{
f >> N >> M;
int x = 0, cer = 0, a = 0, b = 0;;
for(int i = 1; i <= N; i++)
f >> x, add(i, x);
for(int i = 1; i <= M; i++) {
f >> cer;
if(cer == 0) f >> a >> b, add(a, b);
else if(cer == 1) f >> a >> b,
g << sum(b) - sum(a - 1) << "\n";
else if(cer == 2) {
f >> x;
g << cautbin(x) << "\n";
}
}
return 0;
}