cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5 + 10;
int a[N],n,cnt = 1;
void dfs(int l , int r)
{
if(l == r){
a[l] = cnt;
cnt ++;
return;
}
int mid;
if((r - l + 1) % 2 == 0 )
{
mid = (l + r + 1) / 2;
}
else
{
mid = (l + r) / 2;
}
a[mid] = cnt;
cnt ++;
if(l < mid)dfs(l , mid - 1);
if(r > mid)dfs(mid + 1 , r);
}
int main(){
cin >> n;
if(n == 1){
cout << 1;
return 0;
}else if(n == 0){
cout << 0;
return 0;
}
dfs(1,n);
for(int i = 1 ; i <= n ; i ++ )cout << a[i] << " ";
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5 + 10;
struct node{
int l,r,len;
};
int ans = 1,n,a[N];
bool operator<(node a , node b)
{
if(a.len != b.len)return a.len < b.len;
return a.l > b.l;
}
priority_queue<node> q;
int main(){
cin >> n;
if(n == 1){
cout << 1;
return 0;
}else if(n == 0){
cout << 0;
return 0;
}
q.push({1,n,n});
while(q.size())
{
int l = q.top().l , r = q.top().r , len = q.top().len;
q.pop();
if(l == r)
{
a[l] = ans;
ans ++;
continue;
}
int mid;
if(len % 2 == 0)mid = (l + r + 1) / 2;
else mid = (l + r) / 2;
if(l < mid)q.push({l , mid - 1 , mid - l});
if(r > mid)q.push({mid + 1 , r , r - mid});
a[mid] = ans;
ans ++;
}
for(int i = 1 ; i <= n ; i ++ ){
cout << a[i] << " ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1E6 + 10;
int n,m;
int a[N],f[N],p[N];
bool check(int x){
for(int i = 1 ; i <= n ; i ++ ){
if(a[i] < x)f[i] = -1;
else f[i] = 1;
f[i] += f[i - 1];
}
p[1] = f[1];
for(int i = 2 ; i <= n ; i ++ ){
p[i] = min(p[i - 1] , f[i]);
}
for(int i = m ; i <= n ;i ++ ){
if(f[i] - p[i - m] > 0){
return true;
}
}
return false;
}
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i ++ ) {
cin >> a[i];
}
int ans = 0;
int l = 1,r = 1e9;
while(l <= r){
int mid = (l + r) / 2;
if(check(mid)){
ans = mid;
l = mid + 1;
}
else
{
r = mid - 1;
}
}
cout << ans << "\n";
return 0;
}
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com