Cod sursa(job #1816863)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 27 noiembrie 2016 01:12:06
Problema Secv8 Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstring>

std::ifstream in ( "secv8.in"  );
std::ofstream out( "secv8.out" );

const int DIM = 1e6 + 5;

int arr[DIM];

void insert( int pos, int key, int &n ) {
    memmove( arr + pos + 1, arr + pos, (n - pos + 1) * sizeof(int) );
    n ++; arr[pos] = key;
    return; }

void erase( int pos1, int pos2, int &n ) {
    memmove( arr + pos1, arr + pos2 + 1, (n - pos2) * sizeof(int) );
    n -= pos2 - pos1 + 1;
    return; }

void access( int pos, int &n ) {
    out << arr[pos] << "\n";
    return; }

void reverse( int pos1, int pos2, int &n ) {
    std::reverse( arr + pos1, arr + pos2 + 1 );
    return; }

void dump( int &n ) {
    for( int i = 1; i <= n; i ++ ) {
        out << arr[i] << " "; }
    out << "\n";
    return; }

int main( int argc, const char *argv[] ) {
    std::ios::sync_with_stdio( false );
    int m, n = 0, h; in >> m >> h;
    for( int i = 1; i <= m; i ++ ) {
        char ch; in >> ch;
        switch( ch ) {
            case 'I': {
                int k, e; in >> k >> e;
                insert( k, e, n );
                break; }
            case 'A': {
                int k; in >> k;
                access( k, n );
                break; }
            case 'R': {
                int p, q; in >> p >> q;
                reverse( p, q, n );
                break; }
            case 'D': {
                int p, q; in >> p >> q;
                erase( p, q, n );
                break; } } }
    dump( n ); out << "\n";
    return 0; }