Cod sursa(job #2206048)

Utilizator daniellesDanielle S danielles Data 20 mai 2018 22:16:38
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
   ifstream f("datorii.in");
   ofstream g("datorii.out");
   int n, m, v[15001], aib[15001], inc = 1, x, i,q , copyq, sig, sum = 0,a, b, j, opm, flag = 0;
   f >> n >> m;
    f >> x;
    v[1] = x;
    if(x != 0) aib[1] = inc;
    else aib[1] = inc = 0;
     for(i = 2; i<= n; i++){
        f >> x;
        v[i] = x;
        if(x == 0) inc = aib[i] = 0;
        else{
            if(inc != 0) aib[i] = inc;
            else inc = aib[i] = i;
        }


     }

    for(opm = 1; opm <= m; opm++){
        f >> sig >> a >> b;
        if(sig == 0){
            v[a] = v[a] - b;
            if(v[a] == 0){
                aib[a] = 0;
                for(j = a + 1; aib[j] != 0; j++){
                    aib[j]++;
                }
            }
        }
        else{
                sum = 0;
                flag = 0;
                while(a < b){
                  while(aib[b] == 0) b--;
            for(copyq = q = aib[b]; b > a and q <= b; q++){
                if(q < a) q = a;
                if(aib[a] == aib[q]) flag = 1;
                sum = sum + v[q];
            }
            b = copyq - 1;
        }
        if(flag == 0) sum = sum + v[a];
        g << sum << endl ;

        }
    }
     return 0;
   }