Pagini recente » Istoria paginii runda/vs11_12_smileagain/clasament | Cod sursa (job #1458895) | Cod sursa (job #2180738) | Cod sursa (job #2082466) | Cod sursa (job #2487621)
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,i,j,aib[dim],tip,a,b,rez,r,st,dr,mid,m,x;
void update(int poz,int val)
{
for(; poz<=n; poz+=poz&-poz)
{
aib[poz]+=val;
}
}
int query(int poz)
{
int r=0;
for(; poz>0; poz-=poz&-poz)
{
r+=aib[poz];
}
return r;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>x;
update(i,x);
}
for(i=1; i<=m; i++)
{
fin>>tip;
if(tip==0)
{
fin>>a>>b;
update(a,b);
}
else if(tip==1)
{
fin>>a>>b;
rez=-query(a-1);
rez+=query(b);
fout<<rez<<"\n";
}
else
{
fin>>rez;
st=1;
dr=n;
while(st<=dr)
{
mid=(st+dr+1)/2;
r=query(mid);
if(r>=rez)
dr=mid-1;
else
st=mid+1;
}
if(r==rez)
{
fout<<st<<"\n";
}
else
fout<<-1<<"\n";
}
}
}