たなしょのメモ

日々勉強していることをつらつらと

C - Lower

はじめに

たなしょです。

おしかったです。後ろから比べていく考え方自体は近かったんですけどね。

問題文

https://atcoder.jp/contests/abc139/tasks/abc139_c

考え方

reverseで配列の中身を逆順にします。

revese(rdata.begin(), data.end());

配列0番目から比較していきdata[i-1] <= data[i]ならvalを+1する。

data[i-1] <= data[i]を満たせないならvalをリセットする。

max関数でansとvalを比較して大きい方をmaxに代入する。

for (int i = 1; i < N; i++) {
        if (data[i-1] <= data[i]) val++;
        else val = 0;
        ans = max(ans, val);
}

いざ実装

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <cmath>

typedef long long ll;

using namespace std;

int main() {

    int N;
    int ans = 0;
    int val = 0;

    cin >> N;

    vector<int> data(N);

    for (int i = 0; i < N; i++) {
        cin >> data.at(i);
    }

    revese(rdata.begin(), data.end());
    

    for (int i = 1; i < N; i++) {
        if (data[i-1] <= data[i]) val++;
        else val = 0;
        ans = max(ans, val);
    }


    cout << ans << endl;

    return 0;
}

最後に

おしかったなぁ。

最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!