Cod sursa(job #3252316)

Utilizator elisa.ipateElisa Ipate elisa.ipate Data 29 octombrie 2024 10:26:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

#define nmax 15001
int v[nmax];
int grupa[1000], suma[1000];
int main() {
    int n, m, k, t, nr_grupe = 1, tip, a, b, cutie_a, cutie_b, rez;
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    cin >> n >> m;
    k = sqrt( n );
    for( int i = 0; i < n; i++ )
        cin >> v[i];

    for( int i = 0; i < n; i++ )
        suma[i / k] += v[i];

    nr_grupe = (n - 1) / k;
    for( int w = 0; w < m; w++ ) {
        cin >> tip;
        if( tip == 0 ) {
            //achitare
            // s-a achitat b din val zilei a
            cin >> a >> b;
            a--;
            suma[a / k] -= b;
            v[a] -= b;
        } else {
            //interograre
            cin >> a >> b;
            a--;
            b--;
            cutie_a = a / k;
            cutie_b = b / k;
            rez = 0;
            //cout << cutie_a << " " << cutie_b << "\n";
            if( cutie_a == cutie_b ) {
                for( int i = a; i <= b; i++ )
                    rez += v[i];
            } else {
                for( int i = a; i < ((a / k) + 1)* k; i++ )
                    rez += v[i];
                //cout << rez << " ";
                for( int i = cutie_a + 1; i < cutie_b; i++ )
                    rez += suma[i];
                for( int i = b; i >= (b / k) * k; i-- )
                    rez += v[i];
                //cout << rez << "\n";
            }
            cout << rez << "\n";
        }
    }
    return 0;
}