Pagini recente » Cod sursa (job #2060047) | Cod sursa (job #1138187) | Cod sursa (job #2328948) | Cod sursa (job #93727) | Cod sursa (job #1766541)
//
// main.cpp
// Aib
//
// Created by Albastroiu Radu on 9/28/16.
// Copyright © 2016 Albastroiu Radu. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100001], n, m, i, x, tip, a, b;
void update(int poz, int val)
{
if(poz > n)
return;
aib[poz] += val;
poz += poz & (-poz);
update(poz, val);
}
int querry(int poz)
{
int s = 0;
while(poz)
{
s += aib[poz];
poz -= poz & (-poz);
}
return s;
}
int search(int val)
{
int power, i = 0;
for(power = 1; power < n;)
power *= 2;
while(power)
{
if(i + power <= n)
{
if(val >= aib[i + power])
{
i += power;
val -= aib[i];
if(!val)
return i;
}
}
power /= 2;
}
return -1;
}
int main()
{
fin >> n >> m;
for(i = 1; i <= n; i++)
{
fin >> x;
update(i, x);
}
for(i = 1; i <= m; i++)
{
fin >> tip >> a;
if(tip < 2)
{
fin >> b;
if(tip)
fout << querry(b) - querry(a-1) << "\n";
else
update(a, b);
}
else
{
fout << search(a) << "\n";
}
}
return 0;
}