#include<iostream>
using namespace std;
template<typename T>
struct vector{
T *data;
int length, capsize;
vector(){init(0);}
vector(int n){init(n);}
vector(int n, int val){init(n, val);}
T &operator[](int i){return data[i];}
void init(int n, T val = 0){
data = (T*)malloc(sizeof(T) * n);
length = capsize = n;
for(int i = 0; i < length; i++)data[i] = val;
}
void increase(){
T *tmp = data;
data = (T*)malloc(sizeof(T) * 2 * capsize);
for(int i = 0; i < length; i++)data[i] = tmp[i];
capsize *= 2;
}
void push_back(int val){
if(length == capsize)increase();
data[length++] = val;
}
void pop_back(){data[--length] = 0;}
int size(){return length;}
int capacity(){return capsize;}
bool empty(){return length == 0;}
T at(int id){return data[id];}
void clear(){length = 0;}
};