#include <iostream>
#include <string>
#include <stdio.h>
#include <math.h>
#include <queue>
#include <algorithm>
#include <utility>
#include <vector>
#include <tuple>
#include <numeric>
using namespace std;


int main(int argc, char* argv[]){
	int N;
	cin >> N;
	vector<int>P(N);
	for (int i=0; i<N; i++){
		cin >> P[i];
	}
	vector<int> num_list(300000, 0);
	int min=0;
	for(int i=0; i<N; i++){
		num_list[P[i]] = 1;
		for(int num=min; num<300000; num++){
			if(num_list[num]==0){
				cout << num<< endl;
				if(num > min){
					min = num;
				}
				break;
			}
		}
	}

}

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define ll long long

int a[200010], b[200010];
ll d[200010];

int main() {
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i) {
        scanf("%d", &a[i]);
    }
    for(int i = 0; i < n; ++i) {
        scanf("%d", &b[i]);
    }
    int maxa = a[0];
    d[0] = 1ll*maxa*b[0];
    printf("%lld\n", d[0]);
    for(int i = 1; i < n; ++i) {
        maxa = std::max(maxa, a[i]);
        d[i] = std::max(d[i-1], 1ll*b[i]*maxa);
        printf("%lld\n", d[i]);
    }
    return 0;
}