Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6e1c496

Browse files
Add problems
1 parent be9c054 commit 6e1c496

File tree

3 files changed

+102
-65
lines changed

3 files changed

+102
-65
lines changed

‎sliding_median.cpp‎

Lines changed: 0 additions & 65 deletions
This file was deleted.
File renamed without changes.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
typedef long int li;
6+
typedef long long int lli;
7+
typedef vector<long long int> vlli;
8+
typedef pair<lli, lli> plli;
9+
typedef vector<int> vi;
10+
typedef stack<long long int> slli;
11+
12+
void task()
13+
{
14+
15+
lli lenStream;
16+
cin >> lenStream;
17+
priority_queue<lli> maxHeap;
18+
priority_queue<lli, vector<lli>, greater<lli>> minHeap;
19+
20+
lli currentMedian = 0;
21+
22+
lli number;
23+
24+
vector<lli> ans;
25+
26+
cin >> currentMedian;
27+
lenStream--;
28+
ans.emplace_back(currentMedian);
29+
30+
while (lenStream--)
31+
{
32+
33+
cin >> number;
34+
35+
if (maxHeap.size() > minHeap.size())
36+
{
37+
38+
if (number < currentMedian)
39+
{
40+
minHeap.push(maxHeap.top());
41+
maxHeap.pop();
42+
maxHeap.push(number);
43+
}
44+
else
45+
{
46+
minHeap.push(number);
47+
}
48+
49+
currentMedian = (lli)floor((maxHeap.top() + minHeap.top()) / 2.0);
50+
}
51+
else if (maxHeap.size() == minHeap.size())
52+
{
53+
54+
if (number < currentMedian)
55+
{
56+
57+
maxHeap.push(number);
58+
currentMedian = maxHeap.top();
59+
}
60+
else
61+
{
62+
minHeap.push(number);
63+
currentMedian = minHeap.top();
64+
}
65+
}
66+
else
67+
{
68+
69+
if (number > currentMedian)
70+
{
71+
72+
maxHeap.push(minHeap.top());
73+
minHeap.pop();
74+
minHeap.push(number);
75+
}
76+
else
77+
{
78+
maxHeap.push(number);
79+
}
80+
81+
currentMedian = (lli)floor((maxHeap.top() + minHeap.top()) / 2.0);
82+
}
83+
84+
ans.emplace_back(currentMedian);
85+
}
86+
87+
for(auto num: ans) {
88+
cout<<num<<'\n';
89+
}
90+
91+
}
92+
93+
int main()
94+
{
95+
96+
ios::sync_with_stdio(0);
97+
cin.tie(0);
98+
99+
task();
100+
101+
return 0;
102+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /