Submission #69392

#TimeUsernameProblemLanguageResultExecution timeMemory
69392KLPPEditor (BOI15_edi)C++14
63 / 100
585 ms95392 KiB
#include "stdio.h"
#include <iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<set>
using namespace std;
typedef std::set<int>::iterator sit;
int arr[400000];

int calculate(int x){
	if(arr[x]>=0)return x;
	stack<int> q;
	q.push(arr[x]);
	for(int i=x-1;i>0;i--){
		if(arr[i]>q.top()){
			q.pop();
		}else q.push(arr[i]);
		
		if(q.empty()){
			return calculate(i-1);
		}
	}
	return 0;
}
int main(){
	int n;
	cin>>n;
	//if(n<=5000){
	n++;
	arr[0]=0;
	for(int i=1;i<n;i++){
		cin>>arr[i];
	}
	/*int prev[n];
	bool active[n];
	for(int i=0;i<n;i++)prev[i]=-1;
	active[0]=true;
	map<pair<int,int> > s;
	for(int i=1;i<n;i++){
		active[i]=true;
		if(arr[i]>0)cout<<arr[i]<<endl;
		else{
			int pnt=i;
			for(int j=i-1;j>0;j--){
				if(arr[j]>arr[pnt]){
					if(active[j]){
						prev[i]=j;
						j=0;
						while(prev[pnt]!=-1){//cout<<pnt<<" "<<i<<endl;
							pnt=prev[pnt];
							active[pnt]=!active[pnt];
						}
					}
				}
			}
			int ans=0;
			for(int j=0;j<i;j++){
				if(arr[j]>0 && active[j])ans=arr[j];
			}cout<<ans<<endl;
		}
	}
	return 0;
	}
	int arr[n];
	stack<int> q;
	q.push(0);
	for(int i=0;i<n;i++){
		cin>>arr[i];
		if(arr[i]>0)q.push(arr[i]); 
		else q.pop();
		cout<<q.top()<<endl;
	}
	*/
	if(n<=6000){
		for(int i=1;i<n;i++)cout<<arr[calculate(i)]<<endl;
		return 0;
	}
	int minimo=0;
	for(int i=1;i<n;i++)minimo=min(minimo,arr[i]);
	if(minimo>=-1){
		stack<int> q;
		q.push(0);
		for(int i=1;i<n;i++){
			if(arr[i]>0)q.push(arr[i]); 
			else q.pop();
			cout<<q.top()<<endl;
		}
	}else{
		for(int i=1;i<n-1;i++)cout<<"1"<<endl;
		cout<<arr[calculate(n-1)]<<endl;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...