90pts求调第三个数据点RE了(悬一关)
查看原帖
90pts求调第三个数据点RE了(悬一关)
113001
xuhrrr楼主2024/3/1 18:29

代码如下:

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <deque>
using namespace std;
struct node{
    long long x,id;
};
node a[1000005];
deque <node> q1,q2;
int n,k;
int main()
{
    cin >> n >> k;
    for(int i = 1 ; i <= n ; ++i){
        cin >> a[i].x;
        a[i].id = i;
    }
    for(int i = 1 ; i <= k ; ++i){
        if(q1.empty()){
            q1.push_back(a[i]);
        }
        else{
            while(!q1.empty() && q1.back().x > a[i].x){
                q1.pop_back();
            }
            q1.push_back(a[i]);
        }
    }
    cout << q1.front().x << " ";
    for(int i = k + 1,j = 2 ; i <= n ; ++i,++j){
        while(q1.front().id < j){
            q1.pop_front();    
        }
        if(q1.empty()){
            q1.push_back(a[i]);
        }
        else{
            while(!q1.empty() && q1.back().x > a[i].x){
                q1.pop_back();
            }
            q1.push_back(a[i]);
        }
        cout << q1.front().x << " ";
    }
    cout << endl;
    for(int i = 1 ; i <= k ; ++i){
        if(q2.empty()){
            q2.push_back(a[i]);
        }
        else{
            while(!q2.empty() && q2.back().x < a[i].x){
                q2.pop_back();
            }
            q2.push_back(a[i]);
        }
    }
    cout << q2.front().x << " ";
    for(int i = k + 1,j = 2 ; i <= n ; ++i,++j){
        while(q2.front().id < j){
            q2.pop_front();    
        }
        if(q2.empty()){
            q2.push_back(a[i]);
        }
        else{
            while(!q2.empty() && q2.back().x < a[i].x){
                q2.pop_back();
            }
            q2.push_back(a[i]);
        }
        cout << q2.front().x << " ";
    }
    return 0;
}
2024/3/1 18:29
加载中...