loj3341 時代的眼淚

2022-06-07 10:51:07 字數 2831 閱讀 8470

題意即求在區間$[l,r]$中且權值在$[x,y]$中的逆序對個數

考慮分塊,逆序對個數包含4部分:

1.左/右塊外內部,預處理出$i$到其所在塊的塊首/尾,小於/小於等於$j$(需要對$j$離散)的數即可;

2.左塊外與右塊外,預處理出每個塊內數的順序,來對左/右塊外排序,再歸併排序即可;

3.左/右塊外到塊內,預處理出前$i$個塊中小於/小於等於$j$的數個數;

4.塊內部,對權值區間$[x,y]$容斥,變為$[1,y]-[1,x)-[1,x)與[x,y]$

$[1,y]$和$[1,x)$類似,預處理第$i$個塊中的$j$(離散)在 第$k$個塊中比其小的數的個數,特別的,當$k=i$定義為$i$到其所在塊塊首小於$j$的數個數(即1.),然後對$j$和$k$兩維求字首和即可(預處理過程中,為了避免二分,可以先列舉$k$再列舉$j$)

$[1,x)$與$[x,y]$,答案分為兩類:1.塊與塊之間;2.塊內部

第1個比較好做,列舉前$i$個塊,即求出前$i-1$個塊中$[1,x)$的點個數*第$i$個塊中$[x,y]$的點個數,用3.的預處理即可

第2個對第$i$個塊預處理出$j$是否在$k$之前(離散),那麼即求$\sum_^\sum_^f[j][k]$,二位字首和來計算即可

特別的,當$l$和$r$在同乙個連通塊中,直接用第1種做法,再對詢問區間容斥一下即可

時間複雜度為$o(n\sqrt)$,常數極大,可能無法通過

1 #include2

using

namespace

std;

3#define n 100005

4#define k 300

5#define ndk 400

6 vectorv,vl,vr;

7int

n,m,l,r,x,y,a[n],b[n],bl[n],st[n],ed[n],id[n];

8int g1[n][k+10],g2[n][k+10],g3[ndk][n],g4[ndk][n],f1[ndk][k+10][ndk],f2[ndk][k+10][k+10];9

long

long

ans;

10int calc1(int k)

16int calc2(int k)

22int calc3(int l,int r)

28long

long calc4(int l,int r,int x)

34return

ans;35}

36int merge(int x1,int y1,int x2,int y2)

46for(int i=x2;i<=y2;i++)

47if ((x<=a[i])&&(a[i]<=y))b[id[i]]=a[i];

48for(int i=0;i<=ed[bl[x2]]-st[bl[x2]];i++)

49if

(b[i])

53int ans=0;54

for(int i=0,j=0,k=0;(i)

55if ((i;

56else

60return

ans;61}

62int

main()

73for(int i=1;i<=bl[n];i++)

84for(int j=1,k=0;j<=n;j++)

90for(int j=1;j)

95for(int j=st[i];j<=ed[i];j++)f1[i][id[j]][i]=g1[j][id[j]];

96for(int j=1;j<=ed[i]-st[i];j++)f1[i][j][i]+=f1[i][j-1

][i];

97for(int j=0;j<=ed[i]-st[i];j++)f1[i][j][i]+=f1[i][j][i-1

];98

for(int j=st[i];j<=ed[i];j++)

99for(int k=j+1;k<=ed[i];k++)

100if (a[j]1

;101

for(int j=1;j<=ed[i]-st[i];j++)

105for(int j=1;j<=ed[i]-st[i];j++)

106for(int k=1;k<=ed[i]-st[i];k++)f2[i][j][k]+=f2[i][j-1][k]+f2[i][j][k-1]-f2[i][j-1][k-1

];107

}108

for(int i=1;i<=m;i++)

114 ans=calc1(r)+calc2(l)+merge(l,ed[bl[l]],st[bl[r]],r);

115for(int j=st[bl[r]];j<=r;j++)//

x<=a[x]116

if ((x<=a[j])&&(a[j]<=y))ans+=g3[bl[r]-1][a[j]]-g3[bl[r]-1][x]-g3[bl[l]][a[j]]+g3[bl[l]][x];

117for(int j=l;j<=ed[bl[l]];j++)//

a[j]118

if ((x<=a[j])&&(a[j]<=y))ans+=g4[bl[r]-1][y]-g4[bl[r]-1][a[j]]-g4[bl[l]][y]+g4[bl[l]][a[j]];

119 l=bl[l]+1

;120 r=bl[r]-1

;121

if (l<=r)

128}

129 printf("

%lld\n

",ans);

130}

131 }

view code

北上廣不相信眼淚 讀工業4 0時代有感

最近讀了別人推薦的一片文章,工業4.0時代,怎樣為孩子籌備未來教育 文章中有這樣一幅,逃離北上廣 最近恰好也看了這樣一部劇,北上廣不相信眼淚 由馬伊琍 朱亞文領銜主演。該劇講述了隱婚夫妻趙小亮與潘雲在充滿壓力的大都市,乙個來自北京乙個來自上海,為事業和夢想在廣州奮鬥的故事,讓我看到了在北上廣職場工作...

工業4 0時代ERP MES的整合

erp和mes的整合 挑戰之處在於 在生產製造和計畫單元要求不斷細化的情況下,把企業層的 erp 和車間生產管理層 mes 之間的各工藝介面進行整合。erp系統控制企業範圍的行政管理和商務流程,me系統則與生產線緊密相關,用於持續優化生產 記錄生產過程資訊與技術引數。這些資料多種多樣 包括時間和數量...

Web2 0時代的儲存變革?

發現焦點 我剛剛讀了關於web2.0的一篇文章,online information storage completing the web as platform 該文提出乙個非常有價值的思想,就是作者觀察到,隨著web2.0時代online software的普及,舊有的儲存格局有可能改變。恰巧的...