diff --git a/Data Structure 2/2075.cpp b/Data Structure 2/2075.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e2523f2c98a84609b66144fe6bbd8dfacf224cbb --- /dev/null +++ b/Data Structure 2/2075.cpp @@ -0,0 +1,34 @@ +#include<iostream> +#include<queue> +using namespace std; + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + + int N; + cin >> N; + + priority_queue<int, vector<int>, greater<int>> pq; + + for(int i=0;i<N*N;i++) + { + int num; + cin >> num; + + if(pq.size() < N) + pq.push(num); + else + { + if(pq.top() < num) + { + pq.pop(); + pq.push(num); + } + + } + } + + cout << pq.top(); +} \ No newline at end of file diff --git a/Data Structure 2/21939.cpp b/Data Structure 2/21939.cpp new file mode 100644 index 0000000000000000000000000000000000000000..faa6fcbc8b6bf3c3129ff5de075d44983ab700de --- /dev/null +++ b/Data Structure 2/21939.cpp @@ -0,0 +1,102 @@ +#include<iostream> +#include<queue> +#include<map> +using namespace std; + +struct problem +{ + int idx, level; +}; + +struct compare_max +{ + bool operator()(const problem& p1, const problem& p2) + { + if(p1.level == p2.level) + return p1.idx < p2.idx; + return p1.level < p2.level; + } +}; +struct compare_min +{ + bool operator()(const problem& p1, const problem& p2) + { + if(p1.level == p2.level) + return p1.idx > p2.idx; + return p1.level > p2.level; + } +}; + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + int N; + cin >> N; + + map<int, int> diff; + priority_queue<problem, vector<problem>, compare_max> max_heap; + priority_queue<problem, vector<problem>, compare_min> min_heap; + + for(int i=0;i<N;i++) + { + problem input; + cin >> input.idx >> input.level; + + max_heap.push(input); + min_heap.push(input); + diff[input.idx] = input.level; + } + + + + int M; + cin >> M; + + for(int i=0;i<M;i++) + { + string op; + cin >> op; + + if(op == "add") + { + problem input; + cin >> input.idx >> input.level; + + max_heap.push(input); + min_heap.push(input); + diff[input.idx] = input.level; + } + else if(op == "recommend") + { + int x; + cin >> x; + + if(x == 1) + { + while(!max_heap.empty() && diff[max_heap.top().idx] != max_heap.top().level) + max_heap.pop(); + + cout << max_heap.top().idx << "\n"; + + } + else + { + while(!min_heap.empty() && diff[min_heap.top().idx] != min_heap.top().level) + min_heap.pop(); + + cout << min_heap.top().idx << "\n"; + min_heap.pop(); + } + } + else if(op == "solved") + { + int x; + cin >> x; + + diff[x] = 0; + } + } +} \ No newline at end of file diff --git a/Data Structure 2/21942.cpp b/Data Structure 2/21942.cpp new file mode 100644 index 0000000000000000000000000000000000000000..401a86431cb30d3d89d516ed1c1dc4e911234fa1 --- /dev/null +++ b/Data Structure 2/21942.cpp @@ -0,0 +1,76 @@ +#include<iostream> +#include<map> +#include<string> +using namespace std; + +#define int int64_t + +struct books{ + int v{}; + map<string, int> table; +}; + +map<string, books> Map; + +int32_t main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + + int N, L, F; + string string_L; + + cin >> N >> string_L >> F; + + int Day_L = stoi(string_L.substr(0,3)); + int Hour_L = stoi(string_L.substr(4,2)); + int Minute_L = stoi(string_L.substr(7,2)); + + L = Day_L * 1440 + Hour_L * 60 + Minute_L; + + while(N--) + { + string date, time, P, M; + cin >> date >> time >> P >> M; + + int Time; + + int Month = stoi(date.substr(5,2)); + int Day = stoi(date.substr(8,2)); + int Hour = stoi(time.substr(0,2)); + int Minute = stoi(time.substr(3,2)); + + int Month_cum = 0; + for(int i=0;i<Month;i++) + Month_cum += month[i]; + + Time = Month_cum * 1440 + Day * 1440 + Hour * 60 + Minute; + + auto& chk = Map[M]; + if(chk.table.count(P)) + { + if((Time - chk.table[P] - L) > 0) + chk.v += (Time - chk.table[P] - L) * F; + chk.table.erase(P); + } + else + chk.table[P] = Time; + } + + bool chk = false; + auto iter = Map.begin(); + while(iter != Map.end()) + { + if(iter->second.v != 0) + { + chk = true; + cout << iter->first << " " << iter->second.v << "\n"; + } + iter++; + } + if(chk == false) + cout << -1 << '\n'; +} \ No newline at end of file diff --git a/Data Structure 2/21944.cpp b/Data Structure 2/21944.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fa3ee7b0f43bcf0c704eec01a5015f5ce6eece4f --- /dev/null +++ b/Data Structure 2/21944.cpp @@ -0,0 +1,128 @@ +#include<iostream> +#include<string> +#include<vector> +#include<queue> +#include<map> +#include<set> +using namespace std; + +set<pair<int,int>> Q1[101]; +set<pair<int,int>> Q2; +set<pair<int,int>> Q3; // 난이도, 번호 + +int level[100001]; +int algo[100001]; + + +void insert(int P, int L, int G) +{ + Q1[G].insert(make_pair(L, P)); + Q2.insert(make_pair(L, P)); + Q3.insert(make_pair(L, P)); +} +int re1(int G, int x) +{ + if(x == 1) + return prev(Q1[G].end())->second; + else + return Q1[G].begin()->second; +} +int re2(int x) +{ + if(x==1) + return prev(Q2.end())->second; + else + return Q2.begin()->second; +} +int re3(int x, int L) +{ + if(x==1) + { + auto iter = Q3.upper_bound(make_pair(L-1, 999999)); + if(iter == Q3.end()) + return -1; + else + return iter->second; + } + else + { + auto iter = Q3.upper_bound(make_pair(L, -1)); + if(iter == Q3.begin()) + return -1; + else + return prev(iter)->second; + } +} +void del(int P) +{ + int L = level[P]; + int G = algo[P]; + + Q1[G].erase(make_pair(L, P)); + Q2.erase(make_pair(L, P)); + Q3.erase(make_pair(L, P)); +} + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + int N; + cin >> N; + + while(N--) + { + int P, L, G; + cin >> P >> L >> G; + + insert(P, L, G); + level[P] = L; + algo[P] = G; + } + + int M; + cin >> M; + + while(M--) + { + string query; + cin >> query; + + if(query == "recommend") + { + int G, x; + cin >> G >> x; + cout << re1(G, x) << endl; + } + else if(query == "recommend2") + { + int x; + cin >> x; + cout << re2(x) << endl; + } + else if(query == "recommend3") + { + int x, L; + cin >> x >> L; + cout << re3(x, L) << endl; + } + else if(query == "add") + { + int P, L, G; + cin >> P >> L >> G; + + insert(P, L, G); + level[P] = L; + algo[P] = G; + } + else if(query == "solved") + { + int P; + cin >> P; + + del(P); + } + } +} \ No newline at end of file diff --git a/Data Structure 2/2696.cpp b/Data Structure 2/2696.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f7a345dc22599af7e02218a75e367479548efed1 --- /dev/null +++ b/Data Structure 2/2696.cpp @@ -0,0 +1,54 @@ +#include<iostream> +#include<vector> +#include<queue> +using namespace std; + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + int T; + cin >> T; + while(T--) + { + int M; + vector<int> ans; + priority_queue<int, vector<int>, less<int>> max_heap; + priority_queue<int, vector<int>, greater<int>>min_heap; + + cin >> M; + + for(int i=1;i<=M;i++) + { + int num; + cin >> num; + + if(max_heap.size() == min_heap.size()) + max_heap.push(num); + else + min_heap.push(num); + + if(!max_heap.empty() && !min_heap.empty() && min_heap.top() < max_heap.top()) + { + int toMin = max_heap.top(); + int toMax = min_heap.top(); + + max_heap.pop(); + min_heap.pop(); + + max_heap.push(toMax); + min_heap.push(toMin); + } + + if(i%2==1) + ans.push_back(max_heap.top()); + } + + cout << ans.size() << endl; + for(int i=0;i<ans.size();i++) + cout << ans[i] << ' '; + cout << endl; + } +} \ No newline at end of file