P1637 三元上公升子串行

2021-09-02 20:25:01 字數 1133 閱讀 8354

標籤+線段樹+離散化好題。

題意:給定乙個長度為

首先,我們知道求滿足

那麼對於原問題,

#include#include#include#define ri register int

using namespace std;

const int maxn=30020;

int n,a[maxn];

int l[maxn<<2],r[maxn<<2],add[maxn<<2],tot[maxn];

long long sum[maxn<<2],ans;

struct nodeshu[maxn];

bool cmp(node a,node b)

void build(int p,int lft,int rit)

void pushupadd(int p)

void update1(int p,int where,int k)

if(where<=r[p <<1]) update1(p <<1,where,k);

if(l[p <<1|1]<=where) update1(p <<1|1,where,k);

pushupadd(p);

}int query1(int p,int lft,int rit)

void pushup(int p)

void update2(int p,int where,long long k)

if(where<=r[p <<1]) update2(p <<1,where,k);

if(l[p <<1|1]<=where) update2(p <<1|1,where,k);

pushup(p);

}long long query2(int p,int lft,int rit)

int main()

sort(shu+1,shu+n+1,cmp);

a[shu[1].pla]=1;

for(ri i=2;i<=n;i++)

build(1,1,n);

for(ri i=2;i<=n;i++)

for(ri i=2;i<=n;i++)

cout<

return 0;

}

P1637 三元上公升子串行

對於這個題,我們對於每乙個數i,分別求出所有比它小的,在它前面的和 比它大的,在它後面的,然後把這兩個乘起來,然後再把這些積加起來就可以了 然而這樣直接做複雜度太高了,我們要優化,仿照樹狀陣列求逆序對的方法,我們就可以在可以接受的時間內求出並且解決問題了 include include includ...

題解 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...