Pagini recente » Cod sursa (job #1914647) | Cod sursa (job #1836461) | Cod sursa (job #1091670) | Cod sursa (job #2786830) | Cod sursa (job #1427816)
#include<iostream>
#include<cstdio>
using namespace std;
typedef int var;
#define DIM 100000
char buff[DIM];
var poz;
void Read(var &a) {
while(!isdigit(buff[poz]))
if(++poz == DIM)
cin.read(buff, DIM), poz=0;
a = 0;
while(isdigit(buff[poz])) {
a = a * 10 + buff[poz] - '0';
if(++poz == DIM)
cin.read(buff, DIM), poz=0;
}
}
#define COUNT 100000
#define SIZE 300
var Buck[COUNT];
var V[100005];
var n;
void Add(var ind, var val) {
V[ind] += val;
Buck[ind/SIZE] += val;
}
var Query(var b, var e) {
var sum = 0;
var i;
for(i=b; i%SIZE; i++) {
if(i>e) return sum;
sum += V[i];
}
for(var c=i/SIZE;i+SIZE-1<=e;i+=SIZE,c++)
sum += Buck[c];
for(;i<=e;i++)
sum += V[i];
return sum;
}
var Query2(var val) {
var i=0;
for(var c=0; val>Buck[c]; i+=SIZE, c++) {
val -= Buck[c];
if(i>n) return -1;
}
for(;val;val-=V[i++])
if(i>n+1)
return -1;
if(val)
return -1;
return i-1;
}
int main() {
var m;
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
cin.read(buff, DIM);
Read(n);
Read(m);
for(var i=1; i<=n; i++) {
Read(V[i]);
Buck[i/SIZE] += V[i];
}
var type, a, b;
while(m--) {
Read(type);
switch(type) {
case 0:
Read(a);
Read(b);
Add(a, b);
break;
case 1:
Read(a);
Read(b);
cout<<Query(a, b)<<'\n';
break;
case 2:
Read(a);
cout<<Query2(a)<<'\n';
break;
}
}
return 0;
}