莫隊 樹狀陣列 AHOI 作業

2021-08-07 08:55:39 字數 1465 閱讀 7969

3236: [ahoi2013]作業

time limit: 100 sec memory limit: 512 mb

submit: 1716 solved: 690

[submit][status][discuss]

description

input

output

sample input

3 41 2 2

1 2 1 3

1 2 1 1

1 3 1 3

2 3 2 3

sample output

2 21 1

3 22 1

hint

n=100000,m=1000000

source

by wangyisong1996加強資料

[submit][status][discuss]

可以用莫隊沒問題,但裸的莫隊超慢。。可以考慮套樹狀陣列。

維護兩個樹狀陣列,乙個存以當前全職為下標,等於它的個數,乙個存當前下標是否有值。按套路維護一下就行了。

#include

#include

#include

#include

#include

#include

#define n 100005

#define m 1000005

using namespace std;

inline int

read()

while(x>='0'&&x

<='9')

return sum*f;

}int n,m,a[n],ans1[m],ans2[m],t1[n],t2[n],h,kuai[n],tot,sum[n];

struct qq[m];

inline bool cmp(q a,q b)

inline int get1(int

x)inline int get2(int

x)inline void add1(int

x,int k)

inline void add2(int

x,int k)

int yjn()

sort(q+1,q+m+1,cmp);

int l=1,r=1;

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

for(;r>q[i].r;r--)

for(;lfor(;l>q[i].l;l--)

ans1[q[i].id]=get1(q[i].b)-get1(q[i].a-1);

ans2[q[i].id]=get2(q[i].b)-get2(q[i].a-1);

}for(int i=1;i<=m;i++)printf("%d

%d\n",ans1[i],ans2[i]);

}int qty=yjn();

int main()

莫隊 樹狀陣列 AHOI 作業

3236 ahoi2013 作業 time limit 100 sec memory limit 512 mb submit 1716 solved 690 submit status discuss description input output sample input 3 41 2 2 1 ...

題解 AHOI2013 作業(莫隊)

有一段時間沒寫莫隊,今天wzb分享這道題,ssw02一看,我可以用莫隊水,寫的挺快的 歡迎 ssw02的部落格 給定長為n的序列 m個詢問,每次詢問在 下標在 l r 之間 數值在 a b 之間的數的種類和總數 n,m都是在1e5 的範圍內 可以離線,資料支援根號演算法,所以我們可以考慮分塊 總數和...

BZOJ 3289 莫隊 樹狀陣列

題意 問 l,r 區間最少交換幾次相鄰數字使得整個序列有序。思路 統計逆序對,用樹狀陣列。然後跑一遍莫隊。離散化部分容易超時,所以直接修改了陣列。原始碼 include include include include include include include include include u...