Pagini recente » Monitorul de evaluare | Cod sursa (job #1736439) | Profil Pesla | Cod sursa (job #2472979) | Cod sursa (job #825845)
Cod sursa(job #825845)
#include<iostream>
#include<fstream>
using namespace std;
#define NMAX 100001
int c[NMAX],n;
inline int LSB(int x)
{
return x & (-x);
}
int query(int n)
{
int i,s;
s=0;
for(i=n;i>=1;i=i-LSB(i))
s=s+c[i];
return s;
}
void update(int i, int x)
{
for( ;i<=n;i=i+LSB(i))
c[i]=c[i]+x;
}
int cautarebinara(int x)
{
int st,dr,mij;
st=0;
dr=n+1;
while(dr-st>1) {
mij=(st+dr)/2;
if(query(mij)<x)
st=mij;
else dr=mij;
}
if(dr==n+1 || query(dr)!=x)
return -1;
else return dr;
}
int main ()
{
int i,m,a,b,opt;
ifstream f("aib.in");
ofstream g("aib.out");
f>>n>>m;
for(i=1;i<=n;i++) {
f>>a;
update(i,a);
}
for(i=1;i<=m;i++) {
f>>opt;
if(opt==0) {
f>>a>>b;
update(a,b);
}
else if(opt==1) {
f>>a>>b;
g<<query(b)-query(a-1)<<'\n';
}
else {
f>>a;
g<<cautarebinara(a)<<'\n';
}
}
f.close();
g.close();
return 0;
}