Pagini recente » Cod sursa (job #1171969) | Cod sursa (job #1971307) | Cod sursa (job #1606577) | Cod sursa (job #2184882) | Cod sursa (job #2870441)
#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 w[NMAX], AIB[NMAX];
inline void update(int poz, int val)
{
w[poz] += 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;
st = 1, dr = n;
while(st <= dr)
{
mij = (st + dr) / 2;
ax = query(mij);
if(ax >= val)
dr = mij - 1;
else st = mij + 1;
}
return dr + 1;
}
int main()
{
int i, val;
memset(w, 0, sizeof w);
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;
}