Cod sursa(job #3254405)

Utilizator TeodorLuchianovTeo Luchianov TeodorLuchianov Data 7 noiembrie 2024 15:39:29
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");

int const NMAX = 15000;
int arr[1 + NMAX];

int const NNMAX = 123;
int sum[1 + NMAX];

int const bucketSize = 123;

int findBucket(int pos) {
  return (pos-1) / bucketSize + 1;
}

int main() {
  
  int n, m;
  in >> n >> m;
  for(int i = 1;i <= n;i++) {
    in >> arr[i];
    sum[findBucket(i)] += arr[i];
  }
  for(int q = 1;q <= m;q++) { 
    int cer, a, b;
    in >> cer >> a >> b;
    if(cer == 0) {
      arr[a] -= b;
      sum[findBucket(a)] -= b; 
    }else {
      int ans = 0, bucketA = findBucket(a), bucketB = findBucket(b);
      if(bucketA == bucketB) {
	for(int i = a;i <= b;i++) {
          ans += arr[i];
        }
      }else {
        for(int i = a;findBucket(i) == bucketA;i++) {
          ans += arr[i];
        }
        for(int i = bucketA + 1;i < bucketB;i++) {
     	  ans += sum[i];
        }
        for(int i = b;findBucket(i) == bucketB;i--) {
  	  ans += arr[i];
        }
      }
      out << ans << '\n';
    }
  }
  return 0;
}