Pagini recente » Cod sursa (job #1819498) | Cod sursa (job #711661) | Cod sursa (job #2559027) | Cod sursa (job #2411147) | Cod sursa (job #2870450)
#include <bits/stdc++.h>
#define FOR(i, st, dr) for(i = st; i <= dr; i++)
#define pii pair<int,int>
//#define fin cin
//#define fout cout
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 1e5 + 5;
int n, m;
int AIB[NMAX];
inline void update(int poz, int val)
{
while(poz <= n)
{
//AIB[poz] -= w[pz];
AIB[poz] += val;
poz += poz & -poz;
}
}
inline int query(int poz)
{
int sol = 0;
while(poz >= 1)
{
sol += AIB[poz];
poz -= poz & -poz;
}
return sol;
}
inline int bs(int val)
{
int st, dr, mij, ax, ssll = NMAX;
st = 1, dr = n;
while(st <= dr)
{
mij = (st + dr) / 2;
ax = query(mij);
if(ax <= val)
{
if(ax == val)
ssll = min(ssll, mij);
st = mij + 1;
}
else dr = mij - 1;
}
if(ssll == NMAX)
return -1;
return ssll;
}
int main()
{
int i, val;
fin >> n >> m;
for(i = 1; i <= n; ++i)
fin >> val, update(i, val);
for(i = 1; i <= m; ++i)
{
int a, b, c;
fin >> a;
if(a == 0)
{
fin >> b >> c;
update(b, c);
}
else if(a == 1)
{
fin >> b >> c;
fout << query(c) - query(b-1) << '\n';
}
else
{
fin >> b;
fout << bs(b) << '\n';
}
}
return 0;
}