AtCoder Beginner Contest 329

## [A - Spread](https://atcoder.jp/contests/abc329/tasks/abc329_a)

O(N)
ループ文の問題。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int main() {
    string s;
    cin >> s;
    int n = s.size();

    rep(i, n){
        cout << s[i];
        if(i<n-1) cout << ' ';
    }
    cout << endl;

    return 0;
} 
```

## [B - Next](https://atcoder.jp/contests/abc329/tasks/abc329_b)

O(N)
データ構造の問題。
setを使いましょう。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int main() {
    int N;
    cin >> N;
    set<int> st;
    rep(i, N){
        int a;
        cin >> a;
        st.insert(a);
    }

    auto itr = st.rbegin();
    itr++;
    cout << *itr << endl;

    return 0;
} 
```

## [C - Count xxx](https://atcoder.jp/contests/abc329/tasks/abc329_c)

O(N)
setを使用して、a, aa, aaaをカウントしていくとメモリーエラーになります。
ランレングス圧縮の亜種の問題。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int main() {
    int N;
    cin >> N;
    string s;
    cin >> s;

    map<string, int> mp;
    string t = s.substr(0, 1);
    int cnt=1;
    mp[t] = max(mp[t], cnt);
    
    repx(i, 1, N){
        if(t[0] != s[i]){
            t = "";
            cnt = 0;
        }

        cnt++;
        t = s[i];
        mp[t] = max(mp[t], cnt);
    }

    int ans = 0;
    for(auto m:mp) ans += m.second;
    cout << ans << endl;

    return 0;
} 
```

## [D - Election Quick Report](https://atcoder.jp/contests/abc329/tasks/abc329_d)

O()
1票毎に最大値とindexを保持します。

```C++:C++
#include <bits/stdc++.h>
 
#define rep(i,n) for(int i=0; i<(n); ++i)
#define repx(i,x,n) for(int i=x; i<(n); ++i)
#define fixed_setprecision(n) fixed << setprecision((n))
#define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC);
#define pai 3.1415926535897932384
#define NUM_MAX 2e18
#define NUM_MIN -1e9
 
using namespace std;
using ll = long long;
using P = pair<int,int>;
template<class T> inline bool chmax(T& a, T b){ if(a<b){ a=b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b){ if(a>b){ a=b; return 1; } return 0; }

int AA[200010];

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> A(M);
    rep(i, M) cin >> A[i];

    vector<int> AA(N, 0);
    int ans=0;
    rep(i, M){
        AA[A[i]]++;
        if(AA[ans]<AA[A[i]]) ans = A[i];
        else if(AA[ans] == AA[A[i]]) ans = min(A[i], ans);
        cout << ans << endl;
    }

    return 0;
}
```