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