Pagini recente » Istoria paginii utilizator/maria1ioana | Cod sursa (job #779739) | Cod sursa (job #1979855) | Cod sursa (job #2942746) | Cod sursa (job #1845714)
#include <fstream>
#define N 100002
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,aib[N];
inline void update(int pos,int value) {
for (int i=pos;i<=n;i+=zeros(i))
aib[i]+=value;
}
inline int sum(int pos){
int s=0;
for (int i=pos;i>0;i-=zeros(i))
s+=aib[i];
return s;
}
int main()
{
int i,x,type,a,b,lo,hi,mi;
fin>>n>>m;
for (i=1;i<=n;i++) {
fin>>x;
update(i,x);
}
while (m--) {
fin>>type;
if (type==0) {
fin>>a>>b;
update(a,b);
}
if (type==1) {
fin>>a>>b;
fout<<sum(b)-sum(a-1)<<'\n';
}
if (type==2) {
fin>>a;lo=0;hi=n;
while (hi-lo-1)
{
mi=(hi+lo)/2;
if (sum(mi)>=a) hi=mi;
else lo=mi;
}
if (sum(hi)==a) fout<<hi<<'\n';
else fout<<"-1"<<'\n';
}
}
return 0;
}