Pagini recente » Cod sursa (job #3328884) | Atasamentele paginii Junior Challenge 2025 - Runda 2 | Cod sursa (job #3247606) | Cod sursa (job #2324043) | Cod sursa (job #3345851)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, aib[100005], m, x, tip, a, b;
void update(int poz, int val)
{
while (poz<=n)
{
aib[poz]+=val;
poz+=(poz&(-poz));
}
}
int query(int a, int b)
{
if (a!=1)
{
return query(1, b)-query(1, a-1);
}
int sumatot=0;
while (b>0)
{
sumatot+=aib[b];
b-=(b&(-b));
}
return sumatot;
}
int query2(int a)
{
int p=1<<17, r=0, sumtot=0, rasp=-1;
while(p>0)
{
if (r+p<=n and sumtot+aib[r+p]==a)
{
rasp=r+p;
}
if (r+p<=n and sumtot+aib[r+p]<a)
{
sumtot+=aib[r+p];
r+=p;
}
p/=2;
}
return rasp;
}
int main()
{
fin>>n>>m;
for (int i=1; i<=n; i++)
{
fin>>x;
update(i, x);
}
for (int i=1; i<=m; i++)
{
fin>>tip;
if (tip==0)
{
fin>>a>>b;
update(a, b);
}
else if(tip==1)
{
fin>>a>>b;
fout<<query(a, b)<<'\n';
}
else if (tip==2)
{
fin>>a;
fout<<query2(a)<<'\n';
}
}
return 0;
}