-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path123.cpp
More file actions
87 lines (75 loc) · 1.86 KB
/
Copy path123.cpp
File metadata and controls
87 lines (75 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <bits/stdc++.h>
using namespace std;
void init(deque<int>& max,deque<int>& min, vector<int>& nums,int k)
{
max.push_back (nums[0]);
min.push_back(nums[0]);
for(int i = 1;i<k;i++)
{
while(!max.empty()&&nums[i]>max.back())
{
max.pop_back();
}
max.push_back(nums[i]);
while(!min.empty()&&nums[i]<min.back())
{
min.pop_back();
}
min.push_back(nums[i]);
}
}
int main()
{
//解决输入问题
string s;
getline(cin,s);
int pos1,pos2;
for(int i = 0;i<s.size();i++)
{
if(s[i]=='[') pos1 = i;
else if(s[i]==']') pos2 = i;
}
int kpos = s.find('k')+4;
int k = stoi(s.substr(kpos));
string s1 = s.substr(pos1+1,pos2-pos1-1);
int pos3 = -1;
int pos4;
vector<int> nums;
for(int i = 0;i<s1.size();i++)
{
if(s1[i]==',')
{
pos4 = i;
nums.push_back(stoi(s1.substr(pos3+1,pos4-pos3-1)));
pos3 = pos4;
}
}
pos4 = s1.size();
nums.push_back(stoi(s1.substr(pos3+1,pos4-pos3-1)));
deque<int> mmax;
deque<int> mmin;
init(mmax,mmin,nums,k);
int result = mmax.front()-mmin.front();
int leftIndex = 0;
int rightIndex = k;
while(rightIndex<nums.size())
{
result = max(result,mmax.front()-mmin.front());
if(nums[leftIndex]==mmax.front()) mmax.pop_front();
if(nums[leftIndex]==mmin.front()) mmin.pop_front();
while(!mmax.empty()&&nums[rightIndex]>mmax.back())
{
mmax.pop_back();
}
mmax.push_back(nums[rightIndex]);
while(!mmin.empty()&&nums[rightIndex]<mmin.back())
{
mmin.pop_back();
}
mmin.push_back(nums[rightIndex]);
leftIndex++;
rightIndex++;
}
cout<<result<<endl;
return 0;
}