Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <queue>
- #include <list>
- using namespace std;
- int gl_time = 0;
- vector<pair<int, int> > procs; // memory, time
- struct proc {
- int begin, size, end_time;
- proc(int begin = 0, int size = 0, int end_time = 0) {
- this->begin = begin;
- this->size = size;
- this->end_time = end_time;
- }
- };
- vector<proc> ram;
- void generate(int n = 65535) {
- for (int i = 0; i < n; i++) {
- procs.push_back(make_pair(rand() % n, rand() % n));
- }
- }
- //redefine!!!!!!!!!!!!!!!!!!!!!
- struct classcomp1 {
- bool operator() (const proc& lhs, const proc& rhs) const {
- return lhs.begin < rhs.begin;
- }
- };
- struct classcomp2 {
- bool operator() (const proc& lhs, const proc& rhs) const {
- return lhs.end_time < rhs.end_time;
- }
- };
- set<pair<proc, void*>,classcomp1 > fr_bsegment;
- set<pair<proc, void*>,classcomp2 > fr_tsegment;
- void insert(pair<int, int > & a) {
- //new elment
- for (set<pair<proc, void*>,classcomp1 >::iterator it = fr_bsegment.begin(); it != fr_bsegment.end(); ++it) {
- if ((it->first).size >= a.first) {
- proc toInsert((it->first).begin + a.first, a.first,gl_time + a.second);
- ram.push_back(toInsert);
- fr_bsegment.erase(it);
- fr_tsegment.erase(*((set<pair<proc, void *>,classcomp2>::iterator *)(it->second)));
- fr_bsegment.insert(*(new proc((it->first).begin + a.first, (it->first).size - a.second, 0)));
- return ;
- }
- }
- set<pair<proc, set<proc>::iterator>,classcomp2 >::iterator it = fr_tsegment.lower_bound(make_pair(new proc(0, a.first, 0), fr_tsegment.end()));
- gl_time = it->first.end_time;
- fr_bsegment.erase(*((set<pair<proc, void *>,classcomp1>::iterator *)(it->second)));
- insert(a);
- return ;
- }
- int main() {
- generate(100);
- for (int i = 0; i < 100; i++) {
- //are we need to delete
- for (int j = 0; j < ram.size(); j++) {
- if (ram[j].end_time <= gl_time) {
- ram.erase(ram.begin() + j);
- }
- }
- //insert
- insert(procs[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment