Pagini recente » Cod sursa (job #2769943) | Cod sursa (job #2420415) | Cod sursa (job #540446) | Cod sursa (job #2323380) | Cod sursa (job #2832347)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int i, n, m, x, q, a, b;
int aib[100010];
int lsb(int i)
{
return (i&(-i));
}
void update(int i, int p)
{
for(i; i <= n; i+=lsb(i))
aib[i] += p;
}
int query1(int i)
{
int r = 0;
for(i; i; i-=lsb(i))
r += aib[i];
return r;
}
int query2(int p)
{
int mij;
int st = 1, dr = n;
while(st <= dr)
{
mij = (st+dr)/2;
if(query1(mij)>=p)
dr = mij - 1;
else st = mij + 1;
}
if(p == query1(st))
return st;
return -1;
}
int main()
{
fin >> n >> m;
for(i = 1; i <= n; i++)
{
fin >> x; update(i,x);
}
for(int i = 1; i <= m; i++)
{
fin >> q;
if(q == 0)
{
fin >> a >> b;
update(a,b);
}
else
if(q == 1)
{
fin >> a >> b;
fout << query1(b) - query1(a-1) << '\n';
}
else
{
fin >> a;
fout << query2(a) << '\n';
}
}
return 0;
}