思路:考虑每个位置最多被替换c/2次
那么折半考虑,如果小于c/2,从左往右替换,大于c/2总右往左替换,只有小于这个数(从左往右)或者大于这个数(从右往左)才会被替换,所以每个位置最多被替换c/2次。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define mem(a,b) memset(a,b,sizeof(a)) int cnt[1000+5]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m,c,t; cin>>n>>m>>c; while(cin>>t) { if(t<=c/2) { for(int i=1;i<=n;i++) { if(t<cnt[i]||cnt[i]==0) { cnt[i]=t; cout<<i<<endl; break; } } } else { for(int i=n;i>=1;i--) { if(t>cnt[i]||cnt[i]==0) { cnt[i]=t; cout<<i<<endl; break; } } } } return 0; }