Pagini recente » Cod sursa (job #1852209) | Cod sursa (job #1455591) | Cod sursa (job #2932827) | Cod sursa (job #2901237) | Cod sursa (job #2897859)
#include <fstream>
#include <set>
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <cstdio>
#define po 48
using namespace std;
set<long long >zeap;
set<long long> diferente;
long long create_number(char s[100])
{
long long x = 0,p = 1;
for(long long i = 2;s[i] > 47 && s[i] < 58;++i) { x += p * ((int) s[i] - po); p*= 10; }
long long copie = x;
x = 0;
p = 1;
while (copie)
{
x += copie%10*p;
p*=10;copie /= 10;
}
return x;
}
int main()
{
// ifstream f("zeap.in");
ofstream g("zeap.out");
string operatie;
long long nr;
set<long long >::iterator curent,previos,nextp;
long long i = 0;
FILE *pFile;
char s[100];
pFile = fopen("zeap.in","r");
if(pFile == nullptr) perror("Error opening file");
else {
while (fgets(s, 100, pFile) != nullptr) {
if (s[0] == 'I') {
nr = create_number(s);
if (zeap.find(nr) != zeap.end())
continue;
else {
zeap.insert(nr);
i++;
}
if (zeap.size() >= 2) {
curent = zeap.find(nr);
previos = nextp = curent;
nextp++;
previos--;
auto l = zeap.end();
l--;
if (curent != diferente.begin() && curent != l) {
diferente.insert(abs(*curent - *nextp));
diferente.insert(abs(*curent - *previos));
} else if (curent != diferente.begin())
diferente.insert(abs(*curent - *previos));
else if (curent != l)
diferente.insert(abs(*curent - *nextp));
}
} else if (s[0] == 'C') {
nr = create_number(s);
if (zeap.find(nr) != zeap.end())
g << 1 << '\n';
else
g << 0 << '\n';
} else if (s[0] == 'S') {
nr = create_number(s);
if (zeap.find(nr) != zeap.end()) {
curent = zeap.find(nr);
previos = nextp = curent;
previos--;
nextp++;
auto l = zeap.end();
l--;
if (curent != diferente.begin() && curent != l) {
diferente.erase(abs(*curent - *nextp));
diferente.erase(abs(*curent - *previos));
} else if (curent != diferente.begin())
diferente.erase(abs(*curent - *previos));
else if (curent != l)
diferente.erase(abs(*curent - *nextp));
diferente.insert(abs(*nextp - *previos));
zeap.erase(nr);
} else
g << -1 << '\n';
} else if (s[1] == 'A') {
if (zeap.size() < 2)
g << -1 << '\n';
else {
long long first = *next(zeap.begin(), 0);
long long last = *next(zeap.begin(), zeap.size() - 1);
g << abs(last - first) << '\n';
}
} else if (s[1] == 'I') {
if (zeap.size() >= 2) {
long long minim = *diferente.begin();
g << minim << '\n';
} else g << -1 << '\n';
}
}
}
g.close();
fclose(pFile);
return 0;
}