Pagini recente » Cod sursa (job #2346700) | Cod sursa (job #1952999) | Cod sursa (job #3273770) | Cod sursa (job #2629243) | Cod sursa (job #2930676)
#include <iostream>
#include <fstream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
const int NMAX = 1e2;
int v[NMAX+1], aib[NMAX+1];
int n, m;
void add(int x, int q){
for(int j=x; j<=n; j+=zeros(j))
aib[j] += q;
}
int sum(int x){
int ret = 0;
for(int i=x; i>0; i-=zeros(i))
ret += aib[i];
return ret;
}
int caut_binar(int val){
int st = 1;
int dr = n;
while(st <= dr){
int m = (st+dr)/2;
if(sum(m) == val)
return m;
else if(sum(m) <= val)
st = m+1;
else dr = m-1;
}
return -1;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
f>>v[i], add(i, v[i]);
for(int start=1; start<=m; start++){
int t, a, b;
f>>t>>a;
if(t != 2)
f>>b;
//cout<<t<<' '<<a<<' '<<b<<endl;
if(t == 0)
add(a, b);
if(t == 1)
g << sum(b) - sum(a-1) << endl;
if(t == 2){
int mn = caut_binar(a);
g<<mn<<endl;
}
}
return 0;
}