Pagini recente » Cod sursa (job #2002167) | Cod sursa (job #3263364) | Cod sursa (job #2087883) | Cod sursa (job #2769964) | Cod sursa (job #2384302)
#include <fstream>
#define DIM 100005
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n, m, i, a, b, cerinta;
int A[DIM];
inline void update (int i, int a){
while (i <= n){
A[i] += a;
i += (i&-i);
}
}
inline int query (int i){
int sol = 0;
while (i){
sol += A[i];
i -= (i&-i);
}
return sol;
}
inline int cautareBinara (int x){
int st, dr, mid;
st = 1, dr = n;
while (st <= dr){
mid = st + ((dr - st)>>1);
if (query(mid) == x){
return mid;
}
else if (query(mid) > x)
dr = mid - 1;
else
st = mid + 1;
}
return -1;
}
int main(){
fin >> n >> m;
for (i=1; i<=n; i++){
fin >> a;
update (i, a);
}
for (i=1; i<=m; i++){
fin >> cerinta;
if (cerinta == 0){
fin >> a >> b;
update (a, b);
}
if (cerinta == 1){
fin >> a >> b;
fout << query(b) - query(a-1) << "\n";
}
if (cerinta == 2){
fin >> a;
fout << cautareBinara(a) << "\n";
}
}
return 0;
}