對於這個題,我們對於每乙個數i,分別求出所有比它小的,在它前面的和
比它大的,在它後面的,然後把這兩個乘起來,然後再把這些積加起來就可以了
然而這樣直接做複雜度太高了,我們要優化,仿照樹狀陣列求逆序對的方法,我們就可以在可以接受的時間內求出並且解決問題了
#include#includeac#include
#include
using
namespace
std;
intn;
int a[30005
];int tree[30005
];int b[30005
];long
long minn[30005
];long
long
ans;
bool cmp(const
int &x,const
int &y)
int lowbit(int
x)void add(int x,int
k)
return;}
int sum(int
x)
return
ans;
}int
main()
sort(b+1,b+1+n,cmp);
for(int i=1;i<=n;++i)
memset(tree,
0,sizeof
(tree));
for(int i=n;i>=1;--i)
for(int i=1;i<=n;++i)
printf(
"%lld
",ans);
return0;
}
P1637 三元上公升子串行
標籤 線段樹 離散化好題。題意 給定乙個長度為 首先,我們知道求滿足 那麼對於原問題,include include include define ri register int using namespace std const int maxn 30020 int n,a maxn int l ...
題解 P1637 三元上公升子串行
這道題我也不知道怎麼了,改著改著就ac了。然而自己看不懂自己的 但在我仔細思考後就想通了 233。不是有三個數嗎,那就吧當前列舉的數當做三個數中的第二個,先找比它小的數有幾個,再找比它大的數有幾個,分別用mi 和ma 記錄下來,最終答案就是ans mi i ma i include include ...
三元上公升子串行 洛谷p1637
erwin最近對一種叫 thair 的東西巨感興趣。在含有n個整數的序列a1,a2.an中,三個數被稱作 thair 當且僅當i求乙個序列中 thair 的個數。輸入格式 開始乙個正整數n,以後n個數a1 an。輸出格式 thair 的個數 輸入樣例 1 4 50 18 3 4 6 8 1415 1...