Pagini recente » Cod sursa (job #2448516) | Cod sursa (job #2588922) | Cod sursa (job #1920227) | Cod sursa (job #2447765) | Cod sursa (job #2874892)
#include <fstream>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
#define MAX 100001
int N;
int v[MAX];
struct aib{
aib(){
for(int i = 1; i <= N; i++) v[i] = 0;
}
void update(int p, int x){
for(int i = p; i <= N; i += (i & (-i))){
v[i] += x;
}
}
int sum(int p){
int ans = 0;
for(int i = p; i > 0; i -= (i&(-i))){
ans += v[i];
}
return ans;
}
};
int main(){
aib x;
int M;
in >> N >> M;
for(int i = 1; i <= N; i++)
{
in >> v[i];
}
for(int i = 1; i <= M; i++)
{
int a, b, c;
in >> c;
if(c == 0)
{
in >> a >> b;
x.update(a, b);
}
if(c == 1)
{
in >> a >> b;
out << x.sum(b) - x.sum(a-1) << endl;
}
if(c == 2)
{
in >> a;
int pas = 1 << 16;
int k = 0;
while(pas){
if(pas + k <= N && a >= v[pas + k]){
a -= v[pas + k];
k += pas;
}
pas >>= 1;
}
if(a == 0)
out << k << endl;
else
out << "-1" << endl;
}
}
return 0;
}