Pagini recente » Cod sursa (job #978698) | Cod sursa (job #471525) | Cod sursa (job #1002319) | Cod sursa (job #2455702) | Cod sursa (job #531068)
Cod sursa(job #531068)
# include <fstream>
using namespace std;
std :: ifstream f ("datorii.in");
std :: ofstream g ("datorii.out");
int n, m, a[20000], cit;
inline int zero (int a){
return a&-a;
}
void adauga (int poz, int val){
for (int i = poz; i <= n; i += zero (i) )
a[i] += val;
}
inline int max (int a, int b){
return (a > b ? a : b);
}
void scade (int poz, int val){
for (int i = poz; i <= n; i += zero (i) )
a[i] = max (a[i] - val, 0);
}
inline int suma (int poz){
int s = 0;
for (int i = poz; i > 0; i -= zero (i) )
s += a[i];
return s;
}
int intrebare, T, V, P, Q;
int main (){
f >> n >> m;
for (int i = 1; i <= n; ++i){
f >> cit;
adauga (i, cit);
}
for (; m > 0; --m){
f >> intrebare;
if (intrebare == 0){
f >> T >> V;
scade (T, V);
continue ;
}
f >> P >> Q;
g << suma (Q) - suma (P - 1) << '\n';
}
g.close ();
return 0;
}