Pagini recente » Cod sursa (job #2259580) | Cod sursa (job #183580) | Cod sursa (job #2876976) | Cod sursa (job #1219895) | Cod sursa (job #2852799)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, questions, type, x, a, b;
int aib[NMAX];
void updateAIB(int poz, int val) {
for (int i = poz; i <= n; i = i + (i & -i))
aib[i] = aib[i] + val;
}
int queryAIB(int poz) {
int answer = 0;
for (int i = poz; i >= 1; i = i - (i & -i))
answer = answer + aib[i];
return answer;
}
int binarySearch(int val) {
int st = 1;
int dr = n;
while (st <= dr) {
int mij = (st + dr) / 2;
int aibVal = queryAIB(mij);
if (aibVal == val)
return mij;
if (aibVal > val)
dr = mij - 1;
else
st = mij + 1;
}
return -1;
}
int main()
{
f >> n >> questions;
for (int i = 1; i <= n; i++) {
f >> x;
updateAIB(i, x);
}
while (questions--) {
f >> type;
if (type == 0) {
f >> a >> b;
updateAIB(a, b);
}
if (type == 1) {
f >> a >> b;
g << queryAIB(b) - queryAIB(a - 1) << "\n";
}
if (type == 2) {
f >> x;
g << binarySearch(x) << "\n";
}
}
return 0;
}