feat: 添加P9127题解实现子数组排序与查询功能

This commit is contained in:
Zengtudor 2025-09-03 14:34:30 +08:00
parent 17a58ec2aa
commit 8aca422b9d

50
src/9/3/P9127.cpp Normal file
View File

@ -0,0 +1,50 @@
#include <algorithm>
#include <cstdint>
#include <cstdlib>
#include <ios>
#include <iostream>
#include <vector>
#include <limits.h>
using ll = int64_t;
ll n,subn=0;
std::vector<ll> pre;
struct Sub{
ll l,r,sum;
bool operator<(const Sub&r)const{
return sum<r.sum;
}
};
std::vector<Sub> sub;
static inline bool isin(ll l,ll m,ll r){
return l<=m && m<=r;
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin>>n;
pre.resize(n+1);
sub.resize(n*n+1);
for(ll i=1;i<=n;i++){
std::cin>>pre[i];
pre[i]+=pre[i-1];
}
for(ll i=1;i<=n;i++){
for(ll j=i;j<=n;j++){
sub[++subn]={i,j,pre[j]-pre[i-1]};
}
}
std::sort(sub.begin()+1,sub.begin()+1+subn);
for(ll i=1;i<=n;i++){
ll ans=LLONG_MAX;
for(ll j=1;j<subn;j++){
if((isin(sub[j].l, i, sub[j].r) ^ isin(sub[j+1].l, i, sub[j+1].r))){
ans=std::min(ans,sub[j+1].sum-sub[j].sum);
}
}
std::cout<<ans<<"\n";
}
}