Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7230 Accepted Submission(s): 2448
For each test case, the first line has three integers, n, m and k. n is the length of the sequence and is in the range [1, 100000]. m and k are in the range [0, 1000000]. The second line has n integers, which are all in the range [0, 1000000].
Proceed to the end of file.
5 0 0 1 1 1 1 1 5 0 3 1 2 3 4 5
5 4
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
using namespace std;
const int N = 100100+4;
int a[N];
deque<int> q1;
int ans;
deque<int> q2;
int main()
{
int n,m,k;
while(~scanf("%d %d %d",&n,&m,&k))
{
int ans=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int last=0;//注意初值。
while(!q1.empty()) q1.pop_front();
while(!q2.empty()) q2.pop_front();
for(int i=1;i<=n;i++)
{
while(!q1.empty()&&a[i]>=a[q1.back()]) q1.pop_back();
while(!q2.empty()&&a[i]<=a[q2.back()]) q2.pop_back();
q1.push_back(i);
q2.push_back(i);
while(!q1.empty()&&!q2.empty()&&a[q1.front()]-a[q2.front()]>k)
{
if(q1.front()>q2.front())
{
last=q2.front();
q2.pop_front();
}
else
{
last=q1.front();
q1.pop_front();
}
}
if(!q1.empty()&&!q2.empty()&&a[q1.front()]-a[q2.front()]>=m)
{
ans=max(ans,i-last);
}
}
printf("%d\n",ans);
}
}
1047



被折叠的 条评论
为什么被折叠?



