bzoj3932 CQOI2015 任務查詢系統

2022-05-02 05:51:06 字數 2460 閱讀 2343

最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組(si,ei,pi)描述,(si,ei,pi)表示任務從第si秒開始,在第ei秒後結束(第si秒和ei秒任務也在執行),其優先順序為pi。同一時間可能有多個任務同時執行,它們的優先順序可能相同,也可能不同。排程系統會經常向查詢系統詢問,第xi秒正在執行的任務中,優先順序最小的ki個任務(即將任務按照優先順序從小到大排序後取前ki個)的優先順序之和是多少。特別的,如果ki大於第xi秒正在執行的任務總數,則直接回答第xi秒正在執行的任務優先順序之和。上述所有引數均為整數,時間的範圍在1到n之間(包含1和n)。

輸入檔案第一行包含兩個空格分開的正整數m和n,分別表示任務總數和時間範圍。接下來m行,每行包含三個空格分開的正整數si、ei和pi(si≤ei),描述乙個任務。接下來n行,每行包含四個空格分開的整數xi、ai、bi和ci,描述一次查詢。查詢的引數ki需要由公式 ki=1+(ai*pre+bi) mod ci計算得到。其中pre表示上一次查詢的結果,

對於第一次查詢,pre=1。

輸出共n行,每行乙個整數,表示查詢結果。

4 31 2 6

2 3 3

1 3 2

3 3 4

3 1 3 2

1 1 3 4

2 2 4 328

11樣例解釋

k1 = (1*1+3)%2+1 = 1

k2 = (1*2+3)%4+1 = 2

k3 = (2*8+4)%3+1 = 3

對於100%的資料,1≤m,n,si,ei,ci≤100000,0≤ai,bi≤100000,1≤pi≤10000000,xi為1到n的乙個排列。

正解:主席樹。

我真是太製杖了。。二分+主席樹硬是把複雜度弄成了o(nlog^2n)。。

我是這麼做的:按照優先順序為字首建立主席樹。每次新建線段樹就根據上乙個優先順序建立,區間修改,l-r之間維護乙個優先順序的和與任務次數。查詢時先二分,找到當前點正好有k個任務的線段樹,如果沒有那就是最後一棵線段樹。然後直接查詢單點和就好了。

好像網上的做法是按照時間為字首然後離散化優先順序。。我真是太製杖了。。

1

//it is made by wfj_2048~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include

14#define inf (1<<30)

15#define n (100010)

16#define il inline

17#define rg register

18#define ll long long

19#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)

2021

using

namespace

std;

2223

struct

nodeg[n];

2425 ll sum[50*n],res[50*n],lazy[50*n],ls[50*n],rs[50*n],rt[n],n,m,sz,tot,ans=1;26

27il ll gi()

3132 il ll cmp(const node &a,const node &b)

3334 il void update(rg ll x,rg ll &y,rg ll l,rg ll r,rg ll xl,rg ll xr,rg ll v)

37 rg ll mid=(l+r)>>1;38

if (xr<=mid) update(ls[x],ls[y],l,mid,xl,xr,v);

39else

if (xl>mid) update(rs[x],rs[y],mid+1

,r,xl,xr,v);

40else update(ls[x],ls[y],l,mid,xl,mid,v),update(rs[x],rs[y],mid+1,r,mid+1

,xr,v);

41 sum[y]=sum[ls[y]]+sum[rs[y]]+(r-l+1)*lazy[y]; return;42

}4344il ll querytot(rg ll x,rg ll l,rg ll r,rg ll p,rg ll la)

4950

il ll querysum(rg ll x,rg ll l,rg ll r,rg ll p,rg ll la)

5556

il ll find(rg ll x,rg ll siz)

63return

ans;64}

6566 il void

work()

73return;74

}7576int

main()

BZOJ3932 CQOI2015 任務查詢系統

最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的 任務用三元組 si,ei,pi 描述,si,ei,pi 表示任務從第si秒開始,在第ei秒後結束 第si秒和ei秒任務也在執行 其優先順序為pi。同一時間可能有多個任務同時執行,它們的優先順序可能相...

3932 CQOI2015 任務查詢系統

time limit 20 sec memory limit 512 mb submit 1191 solved 437 submit status discuss 最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組 si,ei,pi 描...

BZOJ3932 任務查詢系統

題意 懶得說了自己看吧 ac通道 題解 哎隨便扯兩句吧,一看就知道是主席樹。先離散化,然後對於每個任務,在其左端點插入,右端點刪除,每個詢問只需稍微處理一下就可以了 include using namespace std typedef long long ll typedef double db ...