Pagini recente » Cod sursa (job #456350) | Cod sursa (job #1206563) | Cod sursa (job #1632047) | Cod sursa (job #1510703) | Cod sursa (job #3252290)
#include <iostream>
#include <fstream>
#include <vector>
#include <bits/stdc++.h>
#define in fin
#define out fout
#define ll long long
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m; in >> n >> m;
ll v[n];
for(int i = 0; i < n; i++) in >> v[i];
ll k = sqrt(n);
if(k * k != n) k++;
ll b[k];
for(int i = 0; i < k; i++) b[i] = 0;
int it = 0;
for(int i = 0; i < n; i++){
if(i > 0 && i % k == 0) it++;
b[it] += v[i];
}
// cout << "b : ";
// for(int i = 0; i < k; i++) cout << b[i] << " ";
// cout << '\n';
for(int ii = 0; ii < m; ii++){
ll q, l, r; in >> q >> l >> r;
// cout << "v : ";
// for(int i = 0; i < n; i++) cout << v[i] << " ";
// cout << '\n';
if(q == 1){
l--, r--;
if(r - l < k){ // nu incae niciun bucket intre ele
int sum = 0;
for(int i = l; i <= r; i++) sum += v[i];
continue;
}
ll sum = 0;
while(l % k != 0){
sum += v[l]; l++;
}
while((r + 1) % k != 0){
sum += v[r]; r--;
}
// cout << "l = " << l << " r = " << r << '\n';
for(int i = l / k; i <= r / k; i++){
sum += b[i];
// cout << "i = " << i << " b[i] = " << b[i] << '\n';
}
out << sum << '\n';
}else{
l--;
int it = (l / k); // la ce bucket update
b[it] -= r;
v[l] -= r;
}
}
return 0;
}