题目描述
给定一个由n个元素构成的序列,你需要将其中的元素按顺序压入一个大小为c的栈并弹出。元素按它们的出栈顺序进行排列,会得到一个新的序列。我们知道,这样的序列会有很多种,请输出所有新序列中第一个元素最小的序列(若第一个元素最小的序列有多个,则令第二个尽可能小;若仍有多个,则令第三个最小,以此类推)。
输入输出格式
输入格式:
第一行,两个数n,c
第二行n个数,为序列中n个元素的值
输出格式:
输出n个数,为满足要求的序列。
输入输出样例
输入样例#1:
6 35 2 3 8 7 4
输出样例#1: View Code
2 3 5 4 7 8 显然单调队列是错的 如 4 3 1 3 4 2
- 此题思路其实很简单,所谓的贪心其实就是模拟,模拟一个滑动窗口
#includeusing namespace std;long long a[10005];bool used[10005];int main(){ long long n,c,i,j; scanf("%lld%lld",&n,&c); for(i=1;i<=n;i++) { scanf("%lld",&a[i]); } long long l=1,r=c,k=n,minn,mi; while(k!=0) { minn=9999999999; for(i=l;i<=r;i++) { if(a[i] =1;j--) { if(used[j]==0) { l=j; z=1; break; } } if(r