Pagini recente » Cod sursa (job #2520524) | Cod sursa (job #2705816) | Cod sursa (job #770711) | Cod sursa (job #68947) | Cod sursa (job #968478)
Cod sursa(job #968478)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int Partial[100002],N,M;
void Update(int initial,int value)
{
int i=initial;
while(i<=N)
{
Partial[i]+=value;
i+=i&(-i);
}
}
void Read()
{
int i;
f>>N>>M;
for(i=1;i<=N;i++)
{
int value;
f>>value;
Update(i,value);
}
}
int Calculate_Sum_from_1(int a)
{
int i=a,result=0;
while(i>0)
{
result+=Partial[i];
i-=i&(-i);
}
return result;
}
void Calculate_Sum(int a,int b)
{
g<<Calculate_Sum_from_1(b)-Calculate_Sum_from_1(a-1)<<"\n";
}
void binary_search(int value)
{
int st=1,dr=N,mid;
while(st<=dr)
{
mid=(st+dr)/2;
if(Calculate_Sum_from_1(mid)==value)
{
g<<mid<<"\n";
return;
}
if(Calculate_Sum_from_1(mid)<value)
st=mid+1;
if(Calculate_Sum_from_1(mid)>value)
dr=mid-1;
}
g<<-1<<"\n";
}
void Calculate_Expresions()
{
int i;
for(i=1;i<=M;i++)
{
int quest,value,pozition,pozition2;
f>>quest;
if(quest==0)
{
f>>pozition>>value;
Update(pozition,value);
}
if(quest==1)
{
f>>pozition>>pozition2;
Calculate_Sum(pozition,pozition2);
}
if(quest==2)
{
f>>value;
binary_search(value);
}
}
}
int main()
{
Read();
Calculate_Expresions();
return 0;
}