Pagini recente » Cod sursa (job #1538359) | Cod sursa (job #2481288) | Cod sursa (job #1856287) | Cod sursa (job #2720408) | Cod sursa (job #1513267)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMax = 1e5;
const int BMax = 100;
int n;
int Aib[NMax];
int P = BMax - 1;
char Buffer[BMax];
inline void Read(int &x){
while(!isdigit(Buffer[P])){
if(++P == BMax){
fin.read(Buffer, BMax);
P = 0;
}
}
x = 0;
while(isdigit(Buffer[P])){
x = x * 10 + (Buffer[P] - '0');
if(++P == BMax){
fin.read(Buffer, BMax);
P = 0;
}
}
}
inline void Update(int pos, const int &x){
while(pos <= n){
Aib[pos] += x;
pos += (pos & (-pos));
}
}
inline int Query(int pos){
int sum = 0;
while(pos > 0){
sum += Aib[pos];
pos -= (pos & (-pos));
}
return sum;
}
inline int Solve(const int &sum){
int step = (1 << 20);
for(int i = 0; step; step >>= 1){
if(i + step <= n && Query(step + i) == sum){
return i + step;
}
if(i + step <= n && Query(step + i) < sum){
i += step;
}
}
return -1;
}
int main(){
int m, type, a, b;
Read(n); Read(m);
for(int i = 1; i <= n; i++){
Read(a);
Update(i, a);
}
for(int i = 1; i <= m; i++){
Read(type);
if(type == 0){
Read(a); Read(b);
Update(a, b);
} else {
if(type == 1){
Read(a); Read(b);
fout << Query(b) - Query(a - 1) << "\n";
} else {
Read(a);
fout << Solve(a) << "\n";
}
}
}
return 0;
}