Pagini recente » Cod sursa (job #2125763) | Cod sursa (job #960840) | Cod sursa (job #2987918) | Cod sursa (job #157386) | Cod sursa (job #976792)
Cod sursa(job #976792)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,aib[100001],m,x;
void update (int a, int b)
{
int current=a;
while (current<=n)
{
aib[current] += b;
int lowest_bit = current&(-current);
current += lowest_bit;
}
}
int query (int a)
{
int s=0;
int current=a;
while (current>0)
{
s+=aib[current];
int lowest_bit = current&(-current);
current -= lowest_bit;
}
return s;
}
int bynary_search (int a)
{
int i=0,j;
for (j=1; j<n; j<<=1);
for (;j>=1;j>>=1)
{
if (i+j<=n)
if (a>=aib[i+j]) {i+=j; a-=aib[i];}
}
if (a!=0) return -1;
return i;
}
int main()
{
fin>>n>>m;
for (int i=1; i<=n; i++)
{
fin>>x;
update (i,x);
}
int op,a,b;
for (int i=1; i<=m; i++)
{
fin>>op;
if (op==0) {fin>>a>>b; update (a,b);}
else if (op==1)
{
fin>>a>>b;
x=query (b);
fout<<x-query(a-1)<<"\n";
}
else { fin>>a; fout<<bynary_search (a)<<"\n";}
}
return 0;
}