template付きの関数の書き方
template付きの関数
以下の問題でpriority_queueの昇順・降順を引数で上手いことやりたくて実装した。(これ自体はもっと上手いことやれそう?でも昇順降順で型が違うのでできなさそう?)
Submission #6361635 - AtCoder Regular Contest 074
実装例
Tってもっと具体的な型を書けないのだろうか。
以下は長さのうち個使った時のvector a和をとることを考えている。ここでans[i]には区間で優先度Tに基づいて採用した場合の和が入る。
template<typename T> vector<ll> cum(const vector<ll>& a, int n, priority_queue<ll, vector<ll>, T> q) { vector<ll> ans(n+1); ll sum = accumulate(a.begin(), a.begin()+n, 0ll); REP(i, n) { q.push(a[i]); } ans[0] = sum; REP(i, n) { q.push(a[n+i]); sum += a[n+i] - q.top(); q.pop(); ans[i+1] = sum; } return ans; }