Pagini recente » Cod sursa (job #1441928) | Cod sursa (job #863967) | Cod sursa (job #2200817) | Cod sursa (job #1696243) | Cod sursa (job #1540528)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int AIB[100011],n,m,i,x,tip,y;
void update(int poz, int c)
{
int i;
for(i=poz;i<=n; i+=(i&(-i)))
{
AIB[i]+=c;
}
}
int query(int x)
{
int i,val=0;
for(i=x;i>0;i-=(i&(-i)))
{
val+=AIB[i];
}
return val;
}
int bin(int val)
{
int i,k;
for(k=1;k<n;k<<=1);
for(i=0;k!=0;k>>= 1)
{
if(i+k<=n)
{
if(val >=AIB[i+k])
{
i+=k;
val -= AIB[i];
if(!val)
return i;
}
}
}
return -1;
}
int main()
{f>>n>>m;
for(i=1;i<=n;i++){
f>>x;
update(i,x);}
for(i=1;i<=m;i++){
f>>tip;
if(tip==0)
{
f>>x>>y;
update(x,y);
}
else{
if(tip==1)
{
f>>x>>y;
g<<query(y)-query(x-1)<<'\n';
}
else{
f>>x;
g<<bin(x)<<'\n';
}
}
}
return 0;
}