Pagini recente » Cod sursa (job #932668) | Cod sursa (job #3261657) | Cod sursa (job #1430248) | Cod sursa (job #3176877) | Cod sursa (job #855738)
Cod sursa(job #855738)
#include<fstream>
using namespace std;
ifstream f("aib.in"); ofstream g("aib.out");
const int NMAX = 100001;
int n, m, c[NMAX];
inline void update(int, int);
inline int query(int);
inline int search_min(int);
inline int LSB(int q)
{
return q & (-q);
}
int main()
{
f>>n>>m;
int x, t, y, d;
for(int i = 1; i <= n; ++i)
{
f>>x;
update(i, x);
}
for(; m; --m)
{
f>>t;
if(t < 2)
{
f>>x>>y;
if(!t) update(x, y);
else g<<query(y) - query(x - 1)<<'\n';
}
else
{
f>>x;
g<< search_min(x) <<'\n';
}
}
}
inline void update(int poz, int k)
{
for(; poz <= n; poz += LSB(poz))
c[poz] += k;
}
inline int query(int poz)
{
int sum = 0;
for(; poz > 0; poz -= LSB(poz)) sum += c[poz];
return sum;
}
inline int search_min(int k)
{
int poz;
for(poz = 1; poz < n; poz <<= 1);
for(int i = 0; poz; poz >>= 1)
{
if(i + poz <= n)
{
if(c[i + poz] <= k)
{
k -= c[i + poz];
i += poz;
if(!k) return i;
}
}
}
return -1;
}