Pagini recente » Cod sursa (job #2802499) | Rating Eez ez (ezluci2) | Cod sursa (job #625797) | Cod sursa (job #667325) | Cod sursa (job #1141939)
#include<fstream>
#define NMAX 100010
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, sum[NMAX], aib[NMAX], a[NMAX];
inline int ultim(int x)
{
return (x^(x-1))&x;
}
void Citeste()
{
int i;
f>>n>>m;
for (i=1; i<=n; ++i)
{
f>>a[i];
sum[i]=sum[i-1]+a[i];
}
}
void Preprop()
{
int i;
for (i=1; i<=n; ++i)
aib[i]=sum[i]-sum[i-ultim(i)];
}
void Update(int pz, int x)
{
int i;
for (i=pz; i<=n; i+=ultim(i)) aib[i]+=x;
}
int query(int pz)
{
int i, sum=0;
for (i=pz; i>0; i-=ultim(i)) sum+=aib[i];
return sum;
}
int cauta(int x)
{
int st=1, dr=n, mij, sol=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (query(mij)>=x)
{
dr=mij-1;
sol=mij;
}
else st=mij+1;
}
return sol;
}
void Solve()
{
int op, x, y, i;
for (i=1; i<=m; ++i)
{
f>>op;
if (op==0)
{
f>>x>>y;
Update(x, y);
}
else
if (op==1)
{
f>>x>>y;
g<<query(y)-query(x-1)<<"\n";
}
else
{
f>>x;
g<<cauta(x)<<"\n";
}
}
}
int main()
{
Citeste();
Preprop();
Solve();
f.close();
g.close();
return 0;
}