日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020牛客国庆集训派对day4 What Goes Up Must Come Down

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020牛客国庆集训派对day4 What Goes Up Must Come Down 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

What Goes Up Must Come Down

題意:

我們規定一個序列合理:當一個序列左部分是非降序列,右部分是非升序列(左右部分可為0,也就是整體可以為非降序列,非升序列)

題解:

樹狀數組來做
其實就是求左右的逆序對,我們枚舉中簡單i,然后區間[l,i]的逆序對和[i,r]的反向逆序對
詳細可以看代碼

代碼:

#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); }

總結

以上是生活随笔為你收集整理的2020牛客国庆集训派对day4 What Goes Up Must Come Down的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。