Pagini recente » Borderou de evaluare (job #366986) | Cod sursa (job #1049361) | Cod sursa (job #1964211) | Cod sursa (job #358335) | Cod sursa (job #2982467)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int arbibi[100005], n, m;
int lesbian(int x)
{
return (~x+1)&x;
}
void clit(int a, int b)
{
int j=a;
while(j<=n)
{
arbibi[j]+=b;
j+=lesbian(j);
}
return;
}
int sumix(int a)
{
int sumi=0, j=a;
while(j>0)
{
sumi+=arbibi[j];
j-=lesbian(j);
}
return sumi;
}
void citti()
{
fin>>n>>m;
int x;
for(int i=1; i<=n; i++)
{
fin>>x;
clit(i, x);
}
return;
}
void rezi()
{
int pic, pac, poc;
for(int i=1; i<=m; i++)
{
fin>>pic;
if(pic==2)
{
fin>>pac;
int st=1, dr=n, okk=0;
while(st<=dr && okk==0)
{
int miji=(st+dr)/2;
if(sumix(miji)==pac)
{
fout<<miji<<'\n';
okk=1;
}
if(sumix(miji)<pac)
{
st=miji+1;
}
if(sumix(miji)>pac)
dr=miji-1;
}
if(okk==0)
fout<<-1<<'\n';
}
if(pic==0)
{
fin>>pac>>poc;
clit(pac, poc);
}
if(pic==1)
{
fin>>pac>>poc;
fout<<sumix(poc)-sumix(pac-1)<<"\n";
}
}
}
int main()
{
citti();
rezi();
return 0;
}