mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-05 17:50:36 +00:00
feat: 添加P9127题解实现子数组排序与查询功能
This commit is contained in:
parent
17a58ec2aa
commit
8aca422b9d
50
src/9/3/P9127.cpp
Normal file
50
src/9/3/P9127.cpp
Normal 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";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user