Pagini recente » Cod sursa (job #2471628) | Cod sursa (job #3269081) | Cod sursa (job #1956332) | Cod sursa (job #1871867) | Cod sursa (job #3319817)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int nums[100001];
int lsb(int n) {
return (n & (-n));
}
void modi(int p, int val, int cap) {
for(int i = p; i <= cap; i += lsb(i)){
nums[i] += val;
}
}
int sum(int p, int cap){
if(p > cap) {
p = cap;
}
int suma = 0;
for(int i = p; i >= 1; i -= lsb(i)) {
suma += nums[i];
}
return suma;
}
int cb(int k, int cap) {
int ans = 0;
//int suma = sum(cap, cap);
for(int pas = (1 << 17); pas > 0; pas /= 2){
if (ans + pas <= cap && sum(ans + pas, cap) < k){
ans += pas;
}
}
if(sum(ans + 1, cap) != k)
return -1;
return ans + 1;
}
int main() {
int N, M;
fin >> N >> M;
for(int i = 1; i <= N; i++){
int u; fin >> u;
modi(i, u, N);
}
/*
for(int i = 1; i <= N; i++){
cout << nums[i] << ' ';
}
cout << '\n';
*/
for(int cer = 0; cer < M; cer++){
int t, a, b;
fin >> t >> a;
if(t == 2){
fout << cb(a, N) << '\n';
continue;
}
if(t == 0){
fin >> b;
modi(a, b, N);
}
if(t == 1){
fin >> b;
fout << sum(b, N) - sum(a - 1, N) << '\n';
}
}
return 0;
}