Pagini recente » Cod sursa (job #434766) | Cod sursa (job #2239537)
#include<bits/stdc++.h>
std::ifstream InFile("zeap.in");
std::ofstream OutFile("zeap.out");
char Buffer[50];
int nr;
int maxi,mini;
std::set<int> ElemSet;
std::set<int>::iterator FoundIt, SwapIt2, SwapIt1;
std::multiset<int> DiffSet;
int main()
{
while(!InFile.eof()) {
InFile.getline(Buffer, 50);
int x = 0;
if(Buffer[0]!='M') {
int pos=0;
while(!isdigit(Buffer[pos])) pos++;
while(isdigit(Buffer[pos])) x = x*10 + (Buffer[pos]-'0'), pos++;
}
if(Buffer[0]=='I') {
FoundIt = ElemSet.find(x);
if(!(FoundIt!=ElemSet.end()) && ElemSet.size()) {
if(x > *ElemSet.rbegin())
DiffSet.insert (x - *ElemSet.rbegin());
else if(x < *ElemSet.begin())
DiffSet.insert(*ElemSet.begin() - x);
else {
SwapIt1 = ElemSet.upper_bound(x);
SwapIt2 = SwapIt1; --SwapIt2;
DiffSet.erase(DiffSet.find(*SwapIt1 - *SwapIt2));
DiffSet.insert(nr - *SwapIt2);
DiffSet.insert(*SwapIt1 - nr);
}
}
ElemSet.insert(x);
} else
if(Buffer[0]=='S') {
FoundIt = ElemSet.find(x);
if(FoundIt == ElemSet.end()) OutFile << -1 << '\n';
else {
ElemSet.erase(FoundIt);
if(x >*ElemSet.rbegin()) DiffSet.erase (x - *ElemSet.rbegin());
else if(x < *ElemSet.begin()) DiffSet.erase(*ElemSet.begin() - x);
else {
SwapIt1 = ElemSet.upper_bound(x);
SwapIt2 = SwapIt1; --SwapIt2;
DiffSet.insert(*SwapIt1 - *SwapIt2);
DiffSet.erase(DiffSet.find(x - *SwapIt2));
DiffSet.erase(DiffSet.find(*SwapIt1 - x));
}
}
continue;
} else
if(Buffer[0]=='C') {
FoundIt = ElemSet.find(x);
OutFile << (FoundIt != ElemSet.end()) << '\n';
}
if(Buffer[0]=='M' && Buffer[1]=='A')
if(ElemSet.size()<2) OutFile << -1 << '\n';
else OutFile << *ElemSet.rbegin() - *ElemSet.begin() << '\n';
if(Buffer[0]=='M' && Buffer[1]=='I')
if(!DiffSet.size()) OutFile << -1 << '\n';
else OutFile << *DiffSet.begin() << '\n';
}
return 0;
}