最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的
任務用三元組(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 3
1 2 6
2 3 3
1 3 2
3 3 4
3 1 3 2
1 1 3 4
2 2 4 3
2 8
11k1 = (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的乙個排列
bzoj3932
洛谷p3168
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int maxn = 0x3f3f3f3f;
const
int n = 2e5 + 5, m = 5e6 + 5;
ll ans = 1; int n, m, l, e, fx, rt[n << 1], spj[n];
struct edge
a[n << 1], *t = a, *lst[n];
struct point
tr[m];
//根據題意 1 <= pi <= 10000000
//按照權值線段樹的定義空間顯然是不夠的
//但考慮一共只有2m次插入,每次只增加log2m個節點
//所以我們這麼開是沒有問題的
template
inline
void ckmax(t &a, const t &b)
inline
int get()
inline
void put(ll x)
inline
void addedge(const
int &x, const
int &y)
inline
int abs(const
int &x)
inline
void insert(const
int &y, int &x, const
int &vi, const
int &l, const
int &r)
inline ll query(const
int &x, const
int &l, const
int &r, const
int &k)
int main()
for (int i = 1; i <= n; ++i)
for (int i = 1; i <= n; ++i)
return
0;}
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 ...