Pagini recente » Cod sursa (job #685009) | Profil brandreea | Cod sursa (job #869527) | Cod sursa (job #1138594) | Cod sursa (job #2529499)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
typedef long long lint;
int ay(int a){
return (a)&(-a);
}
int n, m;
int d;
int blog(int a){
int r = 1;
while(r < a){
r <<= 1;
}
return r;
}
struct aib{
lint ar[100041];
void weadd(int p, lint a){
for(int i = p; i <= n; i += ay(i)){
ar[i] += a;
}
}
lint weget(int p){
int s = 0;
for(int i = p; i > 0; i -= ay(i)){
s += ar[i];
}
return s;
}
lint wegetgot(int a, int b){
return weget(b)-weget(a-1);
}
int wefind(lint a){
int r = 0;
lint s = 0;
for(int i = d; i > 0; i >>= 1){
int x = r+i;
if(s+ar[x] <= a && x <= n){
r += i;
s += ar[x];
}
}
if(s != a){
r = -1;
}
return r;
}
};
aib de;
int main(){
fin >> n >> m;
d = blog(n);
for(int i = 1; i <= n; ++i){
int a;
fin >> a;
de.weadd(i, a);
}
for(int i = 0; i < m; ++i){
int op;
fin >> op;
if(op == 0){
int a, b;
fin >> a >> b;
de.weadd(a, b);
}else if(op == 1){
int a, b;
fin >> a >> b;
fout << de.wegetgot(a, b) << "\n";
}else if(op == 2){
int a;
fin >> a;
fout << de.wefind(a) << "\n";
}
}
return 0;
}