2020牛客国庆集训派对day4 What Goes Up Must Come Down
生活随笔
收集整理的這篇文章主要介紹了
2020牛客国庆集训派对day4 What Goes Up Must Come Down
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
What Goes Up Must Come Down
題意:
我們規(guī)定一個(gè)序列合理:當(dāng)一個(gè)序列左部分是非降序列,右部分是非升序列(左右部分可為0,也就是整體可以為非降序列,非升序列)
題解:
樹狀數(shù)組來做
其實(shí)就是求左右的逆序?qū)?#xff0c;我們枚舉中簡單i,然后區(qū)間[l,i]的逆序?qū)蚚i,r]的反向逆序?qū)?br /> 詳細(xì)可以看代碼
代碼:
#include<bits/stdc++.h> #define LL long long using namespace std; const int maxn=5e6+10; long long a[maxn],b[maxn],c[maxn],n; int lowbit(int x){return (-x)&x; } void modify(int pos,int val,long long c[]){for(int i=pos;i<=maxn+1;i+=lowbit(i))c[i]+=val; } long long query(int pos,long long c[]){long long ret=0;for(int i=pos;i>=1;i-=lowbit(i))ret+=c[i];return ret; } int ans1[maxn]; int ans2[maxn]; int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%lld",&a[i]);for(int i=1;i<=n;++i){ans1[i]=query(maxn-a[i]-1,a);modify(maxn-a[i],1,a) ;}for(int i=n;i>=1;--i){ans2[i]=query(maxn-a[i]-1,c);modify(maxn-a[i],1,c);}long long ans=0;for(int i=1;i<=n;i++){ans=ans+min(ans1[i],ans2[i]);}cout<<ans;return 0 ; } #include<stdio.h> #include<string.h> #include<iostream> #include <algorithm>using namespace std; typedef long long ll; int a[100005],now[100005],c[100005]; int lowbit(int i){return i&-i;} int sum(int i) {int ans=0;while(i){ans+=c[i];i-=lowbit(i);}return ans; } void change(int i) {while(i<100005){c[i]++;i+=lowbit(i);} } int main() {int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);ll ans=0;for(int i=1;i<=n;i++){change(a[i]);now[i]=i-sum(a[i]);}memset(c,0,sizeof(c));for(int i=n;i>=1;i--){change(a[i]);ans+=min(now[i],n-i+1-sum(a[i]));}printf("%lld\n",ans); }總結(jié)
以上是生活随笔為你收集整理的2020牛客国庆集训派对day4 What Goes Up Must Come Down的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020牛客国庆集训派对day4 Ari
- 下一篇: 查看Hadoop集群的基本信息