题解:这题超坑,一直以为是要达到和样例一样就行了,到后面一发过。
将1-c分成两份,前半分从前往后遍历遇到0或比他大的替换掉,后面半分从后往前遍历遇到0或比他小的替换掉。最后遍历一遍直到所有都不为0就结束。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[1010];
int n,m;
void left(int p){
for(int i = 1 ; i <= n ; i++){
if(!a[i]||a[i]>p){
a[i] = p;
cout<<i<<endl;
break;
}
}
}
void right(int p){
for(int i = n ; i >= 1 ; i--){
if(!a[i]||a[i]<p){
a[i] = p;
cout<<i<<endl;
break;
}
}
}
bool check(){
for(int i =1 ; i <= n; i++){
if(!a[i]) return false;
}
return true;
}
int main(){
int c,m,p;
cin>>n>>m>>c;
while(m--){
cin>>p;
if(p<=c/2){
left(p);
}else{
right(p);
}
if(check()) break;
}
}