Pagini recente » Cod sursa (job #2325766) | Cod sursa (job #556481) | Cod sursa (job #2468242) | Cod sursa (job #2107280) | Cod sursa (job #1037654)
#include<fstream>
#define lsb(x) ((x)&(-x))
using namespace std;
ifstream f("aib.in"); ofstream g("aib.out");
int n,aib[100005];
void update(int p,int val)
{ for(;p<=n;p+=lsb(p)) aib[p]+=val;}
int query(int p)
{ int ans=0;
for(;p;p-=lsb(p)) ans+=aib[p];
return ans;
}
int main()
{ int m,x,y,tip,Pmax,i;
f>>n>>m;
for(Pmax=1;Pmax<=n;Pmax<<=1);Pmax>>=1;
for(i=1;i<=n;i++) f>>x, update(i,x);
while(m--)
{ f>>tip>>x;
if(tip==2)
{ int ans=0;
for(i=Pmax;i;i>>=1)
if(ans+i<n && query(ans+i)<x) ans+=i;
if(query(ans+1)==x) g<<ans+1<<'\n'; else g<<"-1\n";
}
else
{ f>>y;
if(tip) g<<query(y)-query(x-1)<<'\n'; else update(x,y);
}
}
return 0;
}