Cod sursa(job #332921)

Utilizator MariusMarius Stroe Marius Data 20 iulie 2009 23:51:45
Problema Secv8 Scor Ascuns
Compilator cpp Status done
Runda Marime 1.7 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;

#define MAXN  450000

const char iname[] = "secv8.in";
const char oname[] = "secv8.out";

int vect[MAXN];

int main(int argc, char* argv[]) {
    FILE *fi = fopen(iname, "rt"), *fo = fopen(oname, "wt");
    char ch;
    int i, j, x, count = 0;

    int lines, wr;

    fscanf(fi, "%d %d\n", &lines, &wr);

    while (fscanf(fi, "%c", &ch) == 1) {
        if (ch == 'I') {
            assert( fscanf(fi, "%d %d\n", &i, &x) == 2 );
            assert( 1 <= i && i <= count + 1 );

            i --;
            for (int j = count; j > i; -- j)
                vect[j] = vect[j - 1];
            vect[i] = x;
            ++ count;
        }
        if (ch == 'A') {
            assert( fscanf(fi, "%d\n", &i) == 1 );
            assert( 1 <= i && i <= count );

            fprintf(fo, "%d\n", vect[i - 1]);
        }
        if (ch == 'R') {
            assert( fscanf(fi, "%d %d\n", &i, &j) == 2 );
            assert( 1 <= i && i <= count );
            assert( 1 <= j && j <= count );
            assert( i <= j );

            i -- , j --;
            for (; i < j; ++ i, -- j) {
                int aux = vect[i];
                vect[i] = vect[j], vect[j] = aux;
            }
        }
        if (ch == 'D') {
            assert( fscanf(fi, "%d %d\n", &i, &j) == 2 );
            assert( 1 <= i && i <= count );
            assert( 1 <= j && j <= count );
            assert( i <= j );

            i --, j --;
            int l = j-i+1;
            for (j += 1; j < count; ++ j, ++ i)
                vect[i] = vect[j];
            count -= l;
        }
    }
    for (i = 0; i < count; ++ i)   fprintf(fo, "%d ", vect[i]);

    fcloseall();
    return 0;
}