Pagini recente » Cod sursa (job #2930420) | Cod sursa (job #2536932) | Cod sursa (job #943149) | Cod sursa (job #1798138) | Cod sursa (job #1373829)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int kNMax = 100100;
int aib[kNMax], n;
int Sum(int nod) {
int s = 0;
while (nod) {
s += aib[nod];
nod -= (nod&-nod);
}
return s;
}
void Update(int nod, int val) {
while (nod <= n) {
aib[nod] += val;
nod += (nod&-nod);
}
}
int CautBin(int x) {
int st = 1, dr = n, mij, sum;
while (st <= dr) {
mij = (st + dr) / 2;
sum = Sum(mij);
if(sum == x)
return mij;
if(sum < x)
st = mij + 1;
else
dr = mij - 1;
}
return -1;
}
int main() {
int m, a, b, k, optiune;
in >> n >> m;
for (int i = 1; i <= n; ++i) {
in >> b;
Update(i, b);
}
for (int i = 1; i <= m; ++i) {
in >> optiune;
if (optiune == 0) {
in >> a >> b;
Update(a, b);
} else if(optiune == 1) {
in >> a >> b;
out << Sum(b) - Sum(a - 1) << '\n';
} else {
in >> k;
out << CautBin(k) << '\n';
}
}
in.close();
out.close();
return 0;
}