@mayiyang
2019-08-06T05:08:15.000000Z
字数 638
阅读 554
dp 单调队列
template <typename T>struct dequeue{vector <T> q;ll l,r;void init(int n){q.resize(n);l=0,r=0;}bool empty(){return l>=r;}T back(){return q[r];}T front(){return q[l];}void pop_front(){l++;}void pop_back(){r--;}void push_back(T k){q[++r]=k;}void insert(T k){while (l<=r&&back().first<=k.first) pop_back();push_back(k);}};
定义:
dequeue<pair<ll,int> > q;q.init(101001);for (ll i=1;i<=n;i++){q.insert(make_pair(a[i],i));while (q.front().second<i-k+1) q.pop_front();if (i-k+1>0){ans+=q.front().first;}}