Pagini recente » Monitorul de evaluare | Cod sursa (job #2425045) | Cod sursa (job #1912414) | Cod sursa (job #2764879) | Cod sursa (job #456674)
Cod sursa(job #456674)
#include<fstream>
using namespace std;
ifstream f("aib.in");
#define nmax 100002
int n,m,st,dr,poz,ad;
int s[nmax],bla;
long long suma(int ind)
{
long long sum=0;
while(ind)
{
sum+=s[ind];
ind-=(ind&-ind);
}
return sum;
}
void operatia_0()
{
while(poz<=n)
{
s[poz]+=ad;
poz+=(poz&-poz);
}
}
void initializare()
{
int i;f>>n>>m;
for(i=1;i<=n;i++)
{
f>>ad;poz=i;
operatia_0();
}
}
int operatia_1()
{
st--;
return suma(dr)-suma(st);
}
int operatia_2()
{
st=1;dr=n;int mij;
while(st<dr)
{
mij=(st+dr)/2;
if(suma(mij)>=bla)
dr=mij;
else
st=mij+1;
}
if(suma(st)==bla)
return st;
return -1;
}
int main()
{
int x;
initializare();freopen("aib.out","w",stdout);
for(;m;--m)
{
f>>x;
if(x==0)
{
f>>poz>>ad;
operatia_0();
}
if(x==1)
{
f>>st>>dr;
bla=operatia_1();printf("%d\n",bla);
}
if(x==2)
{
f>>bla;
st=operatia_2();printf("%d\n",st);
}
}
}