咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕咕
kono題面噠!
最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。資料範圍:\(1\leq m,n,s_i,e_i,c_i,a_i,b_i\leq10^5,1\leq p_i\leq10^7,x_i\)為\(1\)到\(n\)的排列。超級計算機中的任務用三元組 \((s_i,e_i,p_i)\)描述,\((s_i,e_i,p_i)\)表示任務從第 \(s_i\) 秒開始,在第 \(e_i\)秒後結束(第 \(s_i\) 秒和 \(e_i\)秒任務也在執行),其優先順序為 \(p_i\)。同一時間可能有多個任務同時執行,它們的優先順序可能相同,也可能不同。
排程系統會經常向查詢系統詢問,第 \(x_i\) 秒正在執行的任務中,優先順序最小的 \(k_i\) 個任務(即將任務按照優先順序從小到大排序後取前 \(k_i\) 個)的優先順序之和是多少。
特別的,如果 \(k_i\) 大於第$ x_i$秒正在執行的任務總數,則直接回答第 \(x_i\) 秒正在執行的任務優先順序之和。上述所有引數均為整數,時間的範圍在\([1,n]\) 之間。
查詢的引數 \(k_i\) 需要由公式$ k_i = 1 +(a_i \times \text+b_i) \bmod c_i$ 計算得到。
其中$pre $表示上一次查詢的結果,定義初始 \(pre=1\) 。
樣例輸入:
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
本人因為懶使用了vector來把每個時間點的操作存下來,如果覺得慢的話可以嘗試一下鍊錶之類的寫法。
一定要注意\(long long\),不能多開也不能少開。
kono**噠!
#include#include#include#include#includeusing namespace std;
typedef long long ll;
char *p1,*p2,buf[1<<20];
#define gc (p1==p2&&(p1=buf,p2=buf+fread(buf,1,1<<20,stdin),p1==p2)?0:(*(p1++)))
//#define gc getchar()
inline ll in()
while(isdigit(ch))
return w?-x:x;
}struct node ;
const int maxn=100010;
vectort[maxn];
ll b[maxn],bs;
int root[maxn];
struct tree
int ins(int p,int l,int r,ll k,ll val)
int mid=((l+r)>>1);
if(mid>=k)sum[rt].ls=ins(sum[p].ls,l,mid,k,val);
else sum[rt].rs=ins(sum[p].rs,mid+1,r,k,val);
return rt;
} ll get_k(ll p,int l,int r,int k)
} tr;
int n,m;
ll last=1;
ll _max=0;
int main()
sort(b+1,b+bs+1);
bs=unique(b+1,b+bs+1)-b-1;
_max=bs;
tr.build(root[0],1,_max);
for(i=1; i<=m; i++)
} for(i=1; i<=m; i++)
else last=tr.get_k(root[x],1,_max,k);
// last=tr.get_k(root[x],1,_max,k);
printf("%lld\n",last);
} return 0;
}
P3168 CQOI2015 任務查詢系統
最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組 si,ei,pi 描述,si,ei,pi 表示任務從第si秒開始,在第ei秒後結束 第si秒和ei秒任務也在執行 其優先順序為pi。同一時間可能有多個任務同時執行,它們的優先順序可能相同...
P3168 CQOI2015 任務查詢系統
最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組 si,ei,pi 描述,si,ei,pi 表示任務從第si秒開始,在第ei秒後結束 第si秒和ei秒任務也在執行 其優先順序為pi。同一時間可能有多個任務同時執行,它們的優先順序可能相同...
P3168 CQOI2015 任務查詢系統
p3168 cqoi2015 任務查詢系統 傳送門 給你 m 條資訊,即乙個優先順序為 p i 的任務,處理時間為 l i r i 給你 n 條詢問,每條詢問 在 x 時刻優先順序前 k 小的任務 p 的總和為多少。1 n,m 10 5,1 p i 10 7 n,m 這樣的範圍,大概是 o nlog...