Pagini recente » Cod sursa (job #2661239) | Cod sursa (job #2698444) | Cod sursa (job #2810827) | Cod sursa (job #2531224) | Cod sursa (job #2242018)
#include <cstdio>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout ("aib.out");
#define nmax 100001
int n, m, aib[nmax], a, b, tip;
void update(int pos, int val)
{
for(int i = pos; i <= n; i += i & -i)
aib[i] += val;
}
int querry(int pos)
{
int sum = 0;
for(int i = pos; i; i -= i & -i)
sum += aib[i];
return sum;
}
int searc(int sum)
{
int l = 1, r = n, pos = -1;
while(l <= r)
{
int mij = (l + r) / 2;
int x = querry(mij);
if(sum < x)
r = mij - 1;
else if(sum > x)
l = mij + 1;
else{
pos = mij;
break;
}
}
return pos;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> a;
update(i, a);
}
for (int i = 0; i < m ; ++i)
{
fin >> tip;
switch(tip)
{
case 0: fin >> a >> b;
update(a, b);
break;
case 1: fin >> a >> b;
fout << querry(b) - querry(a - 1) << endl;
break;
case 2: fin >> a;
fout << searc(a) << endl;;
}
}
return 0;
}