Pagini recente » Cod sursa (job #1893567) | Cod sursa (job #1284899) | Cod sursa (job #1134250) | Cod sursa (job #2428334) | Cod sursa (job #1830097)
#include <bits/stdc++.h>
#define ub(x) (x&(-x))
using namespace std;
int n,m,a,b,c,x,aib[100010];
ifstream f ("aib.in");
ofstream g ("aib.out");
void addAIB(int val, int x)
{
for(int i=x; i<=n; i+=ub(i))
aib[i]+=val;
return;
}
int getAIB (int val)
{
int s=0;
for(int i=val; i>0; i-=ub(i))
s+=aib[i];
return s;
}
int binsearch (int s)
{
int st=1, dr=n, mij=0,q;
while(st<=dr)
{
mij=(st+dr)>>1;
q=getAIB(mij);
if(q==s)
return mij;
else if(q>s)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
f>>x;
addAIB(x,i);
}
for(int i=1; i<=m; i++)
{
f>>c;
if(c==0)
{
f>>a>>b;
addAIB(b,a);
}
else if(c==1)
{
f>>a>>b;
g<<getAIB(b)-getAIB(a-1)<<'\n';
}
else if(c==2)
{
f>>a;
g<<binsearch(a)<<'\n';
}
}
return 0;
}