寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート

paizaラーニングのレベルアップ問題集「ソートメニュー応用編」からの出典です。
paiza.jp
C++による「ソートメニュー応用編」問題集: 区間のソートと、それらの提出コードの解答例です。

僕が作成、提出したコードは、以下のとおりです。

・STEP: 1 ソートの基本

paiza.jp

/*
paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート
STEP: 1 ソートの基本
https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_simple_step0
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n;
    cin>>n;
    vector<ll> a(n),v(n);
    for(ll i=0;i<n;i++){
        cin>>a[i];
        v[i]=a[i];
    }
    sort(v.begin(),v.end());
    if(a==v){
        cout<<"Yes\n";
    }else{
        cout<<"No\n";
    }
    return 0;
}
・STEP: 2 最大最小

paiza.jp

/*
paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート
STEP: 2 最大最小
https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_simple_step1
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n;
    cin>>n;
    ll MAX=-10000,MIN=10000;
    for(ll i=0;i<n;i++){
        ll a;
        cin>>a;
        MAX=max(MAX,a);
        MIN=min(MIN,a);
    }
    cout<<MAX<<" "<<MIN<<endl;
    return 0;
}
・STEP: 3 Top - k (easy)

paiza.jp

/*
paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート
STEP: 3 Top - k (easy)
https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_simple_step2
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,k;
    cin>>n>>k;
    vector<ll> a(n);
    for(ll i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a.rbegin(),a.rend());
    cout<<a[k-1]<<endl;
    return 0;
}
・STEP: 4 重複削除

paiza.jp

/*
paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート
STEP: 4 重複削除
https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_simple_step3
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n;
    cin>>n;
    vector<ll> a;
    for(ll i=0;i<n;i++){
        ll A;cin>>A;
        a.push_back(A);
    }
    sort(a.begin(),a.end());
    a.erase(unique(a.begin(),a.end()),a.end());
    for(ll i=0;i<a.size();i++){
        cout<<a[i]<<(i==a.size()-1 ? "\n" : " ");
    }
    return 0;
}
・FINAL問題: 区間のソート

paiza.jp

/*
paizaラーニング: C++による「ソートメニュー応用編」問題集: 区間のソート
FINAL問題: 区間のソート
https://paiza.jp/works/mondai/sort_advanced/sort_advanced__problems_simple_boss
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,l,r;
    cin>>n>>l>>r;
    l--;
    r--;
    vector<ll> a(n);
    for(ll i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a.begin()+l,a.begin()+r);
    for(ll i=0;i<n;i++){
        cout<<a[i]<<(i==n-1 ? "\n" : " ");
    }
    return 0;
}

paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。