Cod sursa(job #2672473)

Utilizator Mihaela...Mihaela Zmeu Mihaela... Data 14 noiembrie 2020 08:28:40
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include "bits/stdc++.h"

using namespace std;

int main()
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");

    int n,m;
    cin >> n >> m;
    vector<int> v(n);
    vector<int> gr;
    int sc = 0;
    for(int i = 0; i < n; i++) {
        cin >> v[i];
        if(i % 150 != 0 || i == 0) {
            sc += v[i];
        }
        else {
            gr.push_back(sc);
            sc = v[i];
        }
        if (sc != 0 && i == (n - 1)) {
            gr.push_back(sc);
        }
    }

    for ( int e = 0 ; e < m; e++) {
        int a, b, c;
        cin >> a >> b >> c;
        int s = 0;
        if (a == 0) {
            gr[(b - 1) / 150] = gr[(b - 1) / 150] - c;
            v[b-1] = v[b-1] - c;
        }
        else {
            if((b - 1) / 150 == (c - 1) / 150) {
                for ( int r = b - 1 ; r <= c - 1; r++) {
                    s += v[r];
                }
            }
            else {
                int q = (b - 1) / 150;
                int q1 = (c - 1) / 150;
                if ((b - 1) % 150 != 0) {
                    q++;
                }
                if ((c - 1) % 150 == 149) {
                    q1++;
                }
                if(q != q1) {
                    for (int p = q; p < q1; p++) {
                        s += gr[p];
                    }
                }
                while ((b - 1) % 150 > 0) {
                    s += v[b - 1];
                    b++;
                }
                while((c - 1) % 150 >= 0 && (c - 1) % 150 != 149) {
                    s += v[c - 1];
                    c--;
                }
            }
            cout << s << '\n';
        }
    }
    return 0;
}