Pagini recente » Istoria paginii utilizator/snavenport | Cod sursa (job #2796940) | Cod sursa (job #880734) | Cod sursa (job #275142) | Cod sursa (job #1508729)
#include <fstream>
#define NMax 100001
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, elem, aib[NMax], s;
int sum(int j)
{
int sTmp = 0;
while (j > 0) {
sTmp += aib[j];
j = j - (j & (-j));
}
return sTmp;
}
void update(int j, int val)
{
while (j <= n) {
aib[j] += val;
j = j + (j & (-j));
}
}
int binSrc(int val)
{
int st = 1, dr = n, mid = 0, getSum = 0;
while (st <= dr) {
mid = (st+dr) / 2;
getSum = sum(mid);
if (getSum == val)
return mid;
else if (getSum < val)
st = mid + 1;
else
dr = mid - 1;
}
return -1;
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; i++) {
f >> elem;
update(i, elem);
}
int query = 0, val1 = 0, val2 = 0;
for (int i=1; i<=m; i++) {
f >> query;
if (query == 0) {
f >> val1 >> val2;
update(val1, val2);
}
else if (query == 1) {
f >> val1 >> val2;
g << sum(val2) - sum(val1 - 1) << "\n";
}
else {
f >> val1;
g << binSrc(val1) << "\n";
}
}
return 0;
}