Pagini recente » Cod sursa (job #1054878) | Cod sursa (job #1006346) | Cod sursa (job #2713191) | Cod sursa (job #144593) | Cod sursa (job #2515405)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,m,baza;
int arb[100001];
void updateArb(int poz,int val)
{
while(poz<=n)
{
arb[poz]+=val;
poz+=(poz&-poz);
}
}
int sumArb(int poz)
{
int s=0;
while(poz)
{
s+=arb[poz];
poz-=(poz&-poz);
}
return s;
}
int main()
{
cin>>n>>m;
baza=pow(2, (int)log2(n)+1);
for(int val,i=1;i<=n;i++)
{
cin>>val;
updateArb(i,val);
}
for(int q,a,b,k=1;k<=m;k++)
{
cin>>q;
switch(q)
{
case 0:
cin>>a>>b;
updateArb(a,b);
break;
case 1:
cin>>a>>b;
cout<<sumArb(b)-sumArb(a-1)<<'\n';
break;
case 2:
cin>>a;
int poz=0;
for(int p=baza;p;p/=2)
if(poz+p<=n && sumArb(poz+p)<a)
poz+=p;
poz++;
if(sumArb(poz)!=a)
cout<<-1<<'\n';
else
cout<<poz<<'\n';
break;
}
}
return 0;
}