Pagini recente » Monitorul de evaluare | Cod sursa (job #2918634) | Cod sursa (job #675850) | Cod sursa (job #422410) | Cod sursa (job #2656237)
#include <fstream>
#define NMAX 100100
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
unsigned int s[NMAX], C[NMAX], n;
int sum(int x)
{
int S=0,p;
while(x)
{
S+=C[x];
p=(x^(x-1))&x;
x^=p;
}
return S;
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(0);
int p,a,q, st, mij, dr, sol,op,b,x,S;
cin>>n>>q;
for(int i=1; i<=n; ++i)
{
cin>>a;
s[i]=s[i-1]+a;
p=(i^(i-1))&i;
C[i]=s[i]-s[i-p];
}
while(q--)
{
cin>>op>>a;
if(op==0)
{
cin>>b; x=a;
do{
C[x]+=b;
p=(x^(x-1))&x;
x=x+p;
}while(x<=n);
}
else if(op==1)
{
cin>>b;
S=sum(b)-sum(a-1);
cout<<S<<'\n';
}
else{
st=1; dr=n; mij=0; sol=-1;
while(st<=dr)
{
mij=(st+dr)/2;
S=sum(mij);
if(S<a)
st=mij+1;
else if(S>a)
dr=mij-1;
else sol=mij, dr=mij-1;
}
cout<<sol<<'\n';
}
}
return 0;
}