AcWing 829. 模拟队列
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<string>
using namespace std;
typedef long long ll;
const int N=1e+5;
int q[N],idx;
int hh,tt;
void push(int x){
q[tt++]=x;
}
int pop(){
return q[hh++];
}
int query(){
return q[hh];
}
void empty(){
if(tt==hh){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
int main(){
int n;
cin>>n;
string s;
int x;
for(int i=1;i<=n;i++){
cin>>s;
if(s=="push"){
cin>>x;
push(x);
}else if(s=="pop"){
pop();
}else if(s=="empty"){
empty();
}else {
cout<<query()<<endl;
}
}
}
AcWing 830. 单调栈
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int s[N];
int tt;
void stk(int x){
while(s[tt]>=x){
tt--;
}
s[++tt]=x;
}
int main(){
int n;int x;
cin>>n;
s[0]=-1;
for(int i=1;i<=n;i++){
cin>>x;
stk(x);
cout<<s[tt-1]<<" ";
}
cout<<endl;
}
AcWing 154. 滑动窗口
1.题意:
2.题解:
建议再做几遍orz
3.ac代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
int n,k;
int q[N];
int a[N];
int main(){
int hh=0,tt=-1;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
if(hh<=tt&&q[hh]<i-k+1) hh++;
while(hh<=tt&&a[q[tt]]>=a[i]) tt--;
q[++tt]=i;
if(i>=k){
printf("%d ",a[q[hh]]);
}
}
cout<<endl;
hh=0,tt=-1;
for(int i=1;i<=n;i++){
if(hh<=tt&&q[hh]<i-k+1) hh++;
while(hh<=tt&&a[q[tt]]<=a[i]) tt--;
q[++tt]=i;
if(i>=k){
printf("%d ",a[q[hh]]);
}
}
cout<<endl;
}