Pagini recente » Cod sursa (job #2862495) | Cod sursa (job #817612) | Cod sursa (job #1239186) | Cod sursa (job #2364679) | Cod sursa (job #1500501)
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#define maxN 15005 * 4
using namespace std;
int A[maxN], p, v, a, b, S;
void update(int l, int r, int i){
if (l == r){
A[i] += v;
return;
}
int m = (l + r) >> 1;
if (m >= p)
update(l, m, i << 1);
else
update(m + 1, r, (i << 1) + 1);
A[i] = A[i << 1] + A[(i << 1) + 1];
}
void vezi(int l, int r, int i){
if (l >= a && r <= b){
S += A[i];
return;
}
int m = (l + r) >> 1;
if (m >= a) vezi(l, m, i << 1);
if (m < b) vezi(m + 1, r, (i << 1) + 1);
}
ifstream f("datorii.in");
ofstream g("datorii.out");
string s;
int pointer;
void initRead(){
pointer = 0;
getline(f, s, '~');
}
bool isDigit(char c) {
return ('0' <= c && c <= '9');
}
int getInt() {
while (!isDigit(s[pointer]))
++pointer;
int x = 0;
while (isDigit(s[pointer]) && pointer < s.length()) {
x = x * 10 + s[pointer] - '0';
++pointer;
}
return x;
}
int main(){
int n, m;
initRead();
n = getInt();
m = getInt();
for (int i = 1; i <= n; ++i){
int x;
x = getInt();
p = i; v = x;
update(1, n, 1);
}
for (int i = 0; i < m; ++i){
int x, y, z;
x = getInt();
y = getInt();
z = getInt();
if (x == 0) {
p = y; v = -z;
update(1, n, 1);
}
else{
a = y;
b = z;
S = 0;
vezi(1, n, 1);
g << S << "\n";
}
}
f.close();
g.close();
return 0;
}