Pagini recente » Cod sursa (job #2669052) | Cod sursa (job #2927223) | Cod sursa (job #1990627) | Cod sursa (job #1350243) | Cod sursa (job #3155246)
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int bit,nr,poz,n,m,i,x,a,b,ch,st,dr,mij,aib[100001];
long long s,sum;
void update (int i)
{
for (; i<=n; i+=(i&-i))
aib[i]+=x;
}
int query (int i)
{
s=0;
for (; i>0; i-=(i&-i))
s=s+aib[i];
return s;
}
int main()
{
fin>>n>>m;
bit=0;
while ((1<<bit)<=n)
bit++;
bit--;
for (i=1; i<=n; i++)
{
fin>>x;
update (i);
}
for (i=1; i<=m; i++)
{
fin>>ch;
if (ch==0)
{
fin>>a>>b;
x=b;
update (a);
}
if (ch==1)
{
fin>>a>>b;
fout<<query (b)-query (a-1)<<"\n";
}
if (ch==2)
{
fin>>sum;
poz=s=0;
for (b=bit; b>=0; b--)
{
nr=(1<<b);
if (poz+nr<=n&&s+aib[poz+nr]<=sum)
{
s+=aib[poz+nr];
poz+=nr;
}
}
if (s!=sum||s==0)
poz=-1;
fout<<poz<<"\n";
}
}
return 0;
}