Cod sursa(job #385320)

Utilizator remusmpRemus MP remusmp Data 22 ianuarie 2010 16:23:22
Problema Datorii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <stdio.h>

int main()
{
    FILE* fin = fopen("datorii.in", "r");
    FILE* fout = fopen("datorii.out", "w");
    
    int zile[15001];
    int N, M;
    
    fscanf(fin, "%d %d", &N, &M);
    zile[0] = 0;

    int sum[151];
    int s = 0;
    int j = 1;
    sum[0] = 0;
    for (int i = 1; i <= N; i++)
    {
        fscanf(fin, "%d", &zile[i]);
        s += zile[i];
        if ((i % 100) == 0)
        {              
              sum[j++] = s;
        }
    }
    
    int A, B, C;
    
    for (int i = 0; i < M; i++)
    {
        fscanf(fin, "%d %d %d", &A, &B, &C);
        int idxB = B / 100;
        int idxC = C / 100;
        if (A == 0)
        {
              int lim1 = idxB;
              if (B % 100) lim1++;
              for (int k = lim1; k < j; k++)
                  sum[k] -= C;
              zile[B] -= C;
        }
        else
        {
            int aux = 1;
            if (idxB == idxC)
               aux = 0;
                     
            int s1 = 0, s2 = 0;
            if (B % 100)
            {
               for (int k = idxB*100 + aux; k < B; k++)
               {
                   s1 += zile[k];
               }
            }
            else
            {
                s1 = -zile[B];
            }
            if (C % 100)
            {                  
               for (int k = idxC*100 + aux; k <= C; k++)
               {
                   s2 += zile[k];
               }
            }
             
            fprintf(fout, "%d\n", sum[idxC]-sum[idxB]+s2-s1);
        }
    }
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}