Pagini recente » Cod sursa (job #661697) | Cod sursa (job #804004) | Cod sursa (job #544896) | Cod sursa (job #467847) | Cod sursa (job #1461418)
#include <iostream>
#include <cstdio>
#include <set>
#include <fstream>
using namespace std;
class HeapSet {
private:
multiset<int> heapSet;
static const int MAX = 1000000;
int poz;
public:
int *memoryArray;
HeapSet(): poz(1) { memoryArray = new int[MAX + 1];}
~HeapSet() { delete[] memoryArray;}
void insert(const int& value){
heapSet.insert(value);
memoryArray[poz] = value;
poz++;
}
void remove(const int& node) {
heapSet.erase(node);
}
bool search(const int& node) {
if(heapSet.find(node) != heapSet.end()) {
return true;
}
return false;
}
int getMin() {
multiset<int>::const_iterator it = heapSet.begin();
return *it;
}
int getMax() {
multiset<int>::const_iterator it = heapSet.end();
--it;
return *it;
}
void printHeapSet() {
cout << "Heap --> ";
for(multiset<int>::const_iterator it = heapSet.begin(); it != heapSet.end(); ++it) {
cout << *it << ' ';
}
cout <<endl;
}
};
int main(int argc, char const *argv[])
{
// FILE *f, *fwr;
// fwr = fopen("heapuri.out", "w");
// //if((f = fopen("grader_test8.in", "r")) == NULL) {
// if((f = fopen("heapuri.in", "r")) == NULL) {
// fprintf(stderr, "Can't open file\n");
// return 0;
// }
// int N, operatie, nr;
// HeapSet *heap = new HeapSet();
// fscanf(f, "%d", &N);
// for(int i = 0; i < N; i++) {
// fscanf(f, "%d %d", &operatie, &nr);
// cout << "**** " << operatie << " ***** " << nr << endl;
// if(operatie == 1) {
// heap->insert(nr);
// cout << "Add: " << nr << endl;
// }
// else if(operatie == 2) {
// heap->remove(heap->memoryArray[nr]);
// cout << "Delete: " << heap->memoryArray[nr] << endl;
// }
// else if(operatie == 3) {
// fprintf(fwr, "%d\n", heap->getMin());
// cout << "Min: " << heap->getMin() << endl;
// }
// }
// fclose(f);
// fclose(fwr);
ifstream inFile; inFile.open("heapuri.in");
ofstream outFile; outFile.open("heapuri.out");
string line;
int N, operatie, value;
//inFile >> N;
getline(inFile,line);
N = line[0] - '0';
HeapSet *heap = new HeapSet();
for(int i = 0; i < N; i++) {
getline(inFile, line);
if(line.size() > 1) {
operatie = line[0] - '0';
value = line[2] - '0';
if(operatie == 1) {
// cout << "inserting " << value << endl;
heap->insert(value);
}
else if(operatie == 2) {
heap->remove(heap->memoryArray[value]);
// cout << "Deleting " << value << " poz element" << endl;
}
}
else {
operatie = line[0] -'0';
if(operatie == 3) {
int min = heap->getMin();
outFile << min << endl ;
// cout << "Result : " << min << endl;
}
}
}
inFile.close();
outFile.close();
return 0;
}