Cod sursa(job #3133039)

Utilizator CostyRoCostin Ionescu CostyRo Data 24 mai 2023 22:48:22
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <iostream>
#include <fstream>
#include <set>
#include<queue>

std::ifstream input_file("zeap.in");
std::ofstream output_file("zeap.out");
std::set <int> zeap;
std::priority_queue <int> max_difference,new_max_difference;

int main(){
	std::string s;
	while(input_file>>s){
		if(s[0]=='I'){
			int x;
      input_file>>x;
			if(zeap.find(x)==zeap.end()){
				zeap.insert(x);
				std::set<int>::iterator find=zeap.find(x);
				std::set<int>::iterator before=find,after=find;
				before--;
        after++;
				if(find!=zeap.begin()){
          max_difference.push(-abs(*before-*find));
        }
				if(after!=zeap.end()){
          max_difference.push(-abs(*find-*after));
        }
				if(find!=zeap.begin() && after!=zeap.end()){
          new_max_difference.push(-abs(*before-*after));
        }
			}
		}
		else if(s[0]=='S'){
			int x;
      input_file>>x;
			if(zeap.find(x)!=zeap.end()){
				std::set<int>::iterator find=zeap.find(x);
				std::set<int>::iterator before=find,after=find;
				before--;
        after++;
				if(find!=zeap.begin()){
          new_max_difference.push(-abs(*before-*find));
        }
				if(after!=zeap.end()){
          new_max_difference.push(-abs(*find-*after));
        }
				if(find!=zeap.begin() && after!=zeap.end()){
          max_difference.push(-abs(*before-*after));
        }
				zeap.erase(x);
			}
			else{
        output_file<<-1<<"\n";
      }		
		}
		else if(s[0]=='C'){
			int x;
      input_file>>x;
			output_file<<(zeap.find(x)!=zeap.end() ? 1 : 0)<<"\n";
		}
		else if(s[1]=='A'){
      output_file<<(zeap.size()>1 ? *(--zeap.end()) - *(zeap.begin()) : -1)<<"\n";
		}
		else{
			if(zeap.size()>1){
				while(!new_max_difference.empty() && max_difference.top()==new_max_difference.top()){
					max_difference.pop();
					new_max_difference.pop();
				}
				output_file<<-max_difference.top()<<"\n";
			}
			else{
        output_file<<-1<<"\n";
      }
		}
	}

	return 0;
}