Pagini recente » Cod sursa (job #661019) | Cod sursa (job #2778849) | Cod sursa (job #2404015) | Cod sursa (job #245010) | Cod sursa (job #2878068)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[100005], i, n, m, nr, poz, st, fn, k;
void update(int poz, int nr, int n);
int query(int poz);
int ultim(int n);
int determina(int k);
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>nr;
update(i, nr, n);
}
for(i=1; i<=m; i++)
{
fin>>nr;
if(nr==0)
{
fin>>poz>>nr;
update(poz, nr, n);
}
else if(nr==1)
{
fin>>st>>fn;
fout<<query(fn)-query(st-1)<<'\n';
}
else
{
fin>>k;
fout<<determina(k)<<'\n';
}
}
return 0;
}
int ultim(int n)
{
return ((n^(n-1))&n);
}
void update(int poz, int nr, int n)
{
for(int i=poz; i<=n; i+=ultim(i)) v[i]+=nr;
}
int query(int poz)
{
int s=0;
for(int i=poz; i>0; i-=ultim(i)) s+=v[i];
return s;
}
int determina(int k)
{
int st, dr, mij, val;
st=1;
dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
val=query(mij);
if(val<k) st=mij+1;
else if(val>k) dr=mij-1;
else return mij;
}
return 0;
}