Pagini recente » Cod sursa (job #2284747) | Cod sursa (job #2587860) | info-arena 2.0 | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #2206048)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, v[15001], aib[15001], inc = 1, x, i,q , copyq, sig, sum = 0,a, b, j, opm, flag = 0;
f >> n >> m;
f >> x;
v[1] = x;
if(x != 0) aib[1] = inc;
else aib[1] = inc = 0;
for(i = 2; i<= n; i++){
f >> x;
v[i] = x;
if(x == 0) inc = aib[i] = 0;
else{
if(inc != 0) aib[i] = inc;
else inc = aib[i] = i;
}
}
for(opm = 1; opm <= m; opm++){
f >> sig >> a >> b;
if(sig == 0){
v[a] = v[a] - b;
if(v[a] == 0){
aib[a] = 0;
for(j = a + 1; aib[j] != 0; j++){
aib[j]++;
}
}
}
else{
sum = 0;
flag = 0;
while(a < b){
while(aib[b] == 0) b--;
for(copyq = q = aib[b]; b > a and q <= b; q++){
if(q < a) q = a;
if(aib[a] == aib[q]) flag = 1;
sum = sum + v[q];
}
b = copyq - 1;
}
if(flag == 0) sum = sum + v[a];
g << sum << endl ;
}
}
return 0;
}