Pagini recente » Cod sursa (job #857109) | Cod sursa (job #1946415) | Cod sursa (job #2551451) | Cod sursa (job #2249237) | Cod sursa (job #1292654)
#include <fstream>
#define N 100010
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[N],a,b,c,L,R,M,n,m;
int query(int i)
{
int ret=0;
for(;i;i-=i& (-i))
ret+=v[i];
return ret;
}
void upd(int i,int val)
{
for(;i<=n;i+=i&(-i))
v[i]+=val;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>a;
upd(i,a);
}
for(;m;m--)
{
fin>>c;
if(c==0)
{
fin>>a>>b;
upd(a,b);
continue;
}
if(c==1)
{
fin>>a>>b;
fout<<query(b)-query(a-1)<<'\n';
continue;
}
fin>>a;
if(a>query(n))
{
fout<<"-1\n";
continue;
}
for(L=0,R=n;R-L>1;)
{
M=(L+R)/2;
if(query(M)<a)
L=M;
else
R=M;
}
if(query(R)==a)
fout<<R<<"\n";
else
fout<<"-1\n";
}
return 0;
}