template < typename T>
class MyVector {
private :
T* data;
int capacity;
int size;
void resize( ) {
capacity * = 2 ;
T* newData = new T[ capacity] ;
for ( int i = 0 ; i < size; ++ i)
newData[ i] = data[ i] ;
delete [ ] data;
data = newData;
}
public :
MyVector( ) : capacity( 4 ) , size( 0 ) {
data = new T[ capacity] ;
}
void push_back( T value) {
if ( size == capacity)
resize( ) ;
data[ size++ ] = value;
}
void pop_back( ) {
if ( size > 0 )
-- size;
}
void push_front( T value) {
if ( size == capacity)
resize( ) ;
for ( int i = size; i > 0 ; -- i)
data[ i] = data[ i - 1 ] ;
data[ 0 ] = value;
++ size;
}
void pop_front( ) {
if ( size == 0 ) return ;
for ( int i = 0 ; i < size - 1 ; ++ i)
data[ i] = data[ i + 1 ] ;
-- size;
}
T operator[ ] ( int index) const {
return data[ index] ;
}
int getSize( ) const {
return size;
}
} ;
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIE15VmVjdG9yIHsKcHJpdmF0ZToKICAgIFQqIGRhdGE7CiAgICBpbnQgY2FwYWNpdHk7CiAgICBpbnQgc2l6ZTsKCiAgICB2b2lkIHJlc2l6ZSgpIHsKICAgICAgICBjYXBhY2l0eSAqPSAyOwogICAgICAgIFQqIG5ld0RhdGEgPSBuZXcgVFtjYXBhY2l0eV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgIG5ld0RhdGFbaV0gPSBkYXRhW2ldOwogICAgICAgIGRlbGV0ZVtdIGRhdGE7CiAgICAgICAgZGF0YSA9IG5ld0RhdGE7CiAgICB9CgpwdWJsaWM6CiAgICBNeVZlY3RvcigpIDogY2FwYWNpdHkoNCksIHNpemUoMCkgewogICAgICAgIGRhdGEgPSBuZXcgVFtjYXBhY2l0eV07CiAgICB9CgogICAgdm9pZCBwdXNoX2JhY2soVCB2YWx1ZSkgewogICAgICAgIGlmIChzaXplID09IGNhcGFjaXR5KQogICAgICAgICAgICByZXNpemUoKTsKICAgICAgICBkYXRhW3NpemUrK10gPSB2YWx1ZTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgewogICAgICAgIGlmIChzaXplID4gMCkKICAgICAgICAgICAgLS1zaXplOwogICAgfQoKICAgIHZvaWQgcHVzaF9mcm9udChUIHZhbHVlKSB7CiAgICAgICAgaWYgKHNpemUgPT0gY2FwYWNpdHkpCiAgICAgICAgICAgIHJlc2l6ZSgpOwogICAgICAgIGZvciAoaW50IGkgPSBzaXplOyBpID4gMDsgLS1pKQogICAgICAgICAgICBkYXRhW2ldID0gZGF0YVtpIC0gMV07CiAgICAgICAgZGF0YVswXSA9IHZhbHVlOwogICAgICAgICsrc2l6ZTsKICAgIH0KCiAgICB2b2lkIHBvcF9mcm9udCgpIHsKICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm47CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgKytpKQogICAgICAgICAgICBkYXRhW2ldID0gZGF0YVtpICsgMV07CiAgICAgICAgLS1zaXplOwogICAgfQoKICAgIFQgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07CiAgICB9CgogICAgaW50IGdldFNpemUoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHNpemU7CiAgICB9Cn07Cg==