洛谷P2032
这两天被PPT搞晕了,我恨PPT
昨天晚上的CF.div2打0了,A题一点思路没有
B题思路对但是码力太弱,老过不去样例
C题想出来了螺旋填数,但是没看题解之前我不知道那叫螺旋填数,也被码量吓到了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k; cin >> n >> k;
vector<int>a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
}
deque<int> q;//单调队列容器(存的是下标而非a[i]的值)
for(int i = 0; i < n; i++) {
while(!q.empty() && a[q.back()] < a[i]) {
q.pop_back();
}
//队列不为空时弹出所有比a[i]值小的下标
//如原:1 3 4, a[5] = 4
//对应a值:5 4 3
//改动后: 1 3, a: 5 4
q.push_back(i);
//压入a[i]下标
//e.g. 1 3 5 -> a: 5 4 4
if(q.front() <= i - k)q.pop_front();
//如果当前最大值被移出木板
//最先进入的下标被pop
//确保队列中最大a值能在木板之下
if(i >= k - 1)cout << a[q.front()] << '\n';
//前k-1个数覆盖不满木板
}
return 0;
}
// int main(){
// int n, k; cin >> n >> k;
// deque<int> q;
// for(int i = 0; i < n; i++) {
// int tmp; cin >> tmp;
// q.push_back(tmp);
// int maxa = 0;
// if(i == k - 1){
// for(int a : q) {
// maxa = max(a, maxa);
// }
// cout << maxa <<'\n';
// }
// if(i < k) continue;
// q.pop_front();
// for(int a : q) {
// maxa = max(a, maxa);
// }
// cout << maxa <<'\n';
// }
// return 0;
// }
//暴力,两个测试点超时

浙公网安备 33010602011771号