Pagini recente » Monitorul de evaluare | Cod sursa (job #1746976) | Cod sursa (job #2034289) | Cod sursa (job #670014) | Cod sursa (job #1704066)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, l1, i, nr, cn, tip, a, b;
int arb[15005];
char s[100000];
int suma(int poz){
int s = 0;
while (poz > 0){
s += arb[poz];
poz -= (poz ^ (poz-1)) & poz;
}
return s;
}
void adaug(int poz, int k){
while (poz <= n){
arb[poz] += k;
poz += (poz ^ (poz-1)) & poz;
}
}
int main(){
f >> n >> m;
/// Parsez citirea.
f.get();
f.getline(s, sizeof(s));
l1 = strlen(s);
cn = 0;
for (i = 0; i < l1;){
if (s[i] >= '0' && s[i] <= '9'){
nr = 0;
while (s[i] >= '0' && s[i] <= '9')
nr = nr*10 + s[i] - '0', i++;
cn++;
adaug(cn, nr);
}
else i++;
}
while (m){
f.getline(s, sizeof(s));
cn = 0;
l1 = strlen(s);
for (i = 0; i < l1;){
if (s[i] >= '0' && s[i] <= '9'){
nr = 0;
while (s[i] >= '0' && s[i] <= '9')
nr = nr*10 + s[i] - '0', i++;
cn++;
if (cn == 1)
tip = nr;
else if (cn == 2)
a = nr;
else b = nr;
}
else i++;
}
/// Raspunde la intrebari.
if (tip == 0)
adaug(a, -b);
else g << suma(b) - suma(a-1) << '\n';
m--;
}
return 0;
}