Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- class Student
- {
- public:
- string f;
- string l;
- int y;
- Student()
- {
- }
- void print()
- {
- cout << f << " " << l << " " << y << endl;
- }
- friend bool operator< (const Student &a, const Student &b)//make my life easy overload-sempai
- {
- if(a.y != b.y)
- {
- return (a.y < b.y);
- }
- else if(a.f != b.f)
- {
- return (a.f < b.f);
- }
- else
- {
- return (a.l < b.l);
- }
- }
- friend bool operator== (const Student &a, const Student &b)//make my life easy overload-sempai
- {
- return(a.y == b.y && a.f == b.f && a.l == b.l);
- }
- friend bool operator<= (const Student &a, const Student &b)//make my life easy overload-sempai
- {
- if(a == b)
- {
- return true;
- }
- else if(a.y != b.y)
- {
- return (a.y < b.y);
- }
- else if(a.f != b.f)
- {
- return (a.f < b.f);
- }
- else
- {
- return (a.l < b.l);
- }
- }
- };
- vector<Student> temp;
- void proster(vector<Student> s)
- {
- for(int i = 0; i < s.size(); i++)
- {
- s.at(i).print();
- }
- cout << endl;
- }
- void merge(vector<Student> &s, int l, int r)
- {
- int m = (l+r)/2;
- int size = r-l+1;
- int li = l;
- int ri = m+1;
- int i = l;
- while(li <= m && ri <= r)
- {
- if(s.at(li) <= s.at(ri))
- {
- temp.at(i) = s.at(li);
- li++;
- }
- else
- {
- temp.at(i) = s.at(ri);
- ri++;
- }
- i++;
- }
- copy(s.begin()+li, s.begin() + m-li+1, temp.begin()+i);
- copy(s.begin()+m, s.begin() + r-ri+1, temp.begin()+i);
- copy(temp.begin(), temp.end(), s.begin()+l);
- proster(s);
- }
- void mergesorthelper(vector<Student> &s, int l, int r){
- if(l < r)
- {
- int m = (l+r/2);
- mergesorthelper(s, l, m);
- mergesorthelper(s, m+1, r);
- merge(s, l, r);
- }
- else
- {
- return;
- }
- }
- void mergesort(vector<Student> &s)
- {
- mergesorthelper(s, 0, s.size());
- }
- int main() {
- int num;
- int j;
- vector<Student> roster;
- Student t;
- cin >> num;
- for(int i = 0; i < num; i++)
- {
- cin >> t.f >> t.l >> t.y;
- roster.push_back(t);
- }
- temp = roster;
- mergesort(roster);
- proster(roster);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement