Pagini recente » Cod sursa (job #3183798) | Cod sursa (job #2158234) | Cod sursa (job #1675300) | Cod sursa (job #2371290) | Cod sursa (job #2384780)
#include <IOstream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout ("aib.out");
int n,m,x,aib[100010],k,a,b;
void update(int i, int y) {
while (i<=n) {
aib[i]+=y;
i+=i&-i;
}
}
int sum(int i) {
int sol=0;
while (i){
sol+=aib[i];
i-= i&-i;
}
return sol;
}
int findMinPos(int y) {
int l=1,r=n;
while (l<=r) {
int m=(l+r)/2;
int s=sum(m);
if (s==y)
return m;
else
if (s<y)
l=m+1;
else
r=m-1;
}
return -1;
}
int main() {
fin>>n>>m;
for (int i=1;i<=n;i++) {
fin>>x;
update(i,x);
}
while (m--){
fin>>k;
if (k==0) {
fin>>a>>b;
update(a,b);
} else
if(k==1){
fin>>a>>b;
fout<<sum(b)-sum(a-1)<<"\n";
}
else {
fin>>a;
fout<<findMinPos(a)<<"\n";
}
}
}