利用時間點建樹,因為主席樹建樹時第i結點會繼承第i-1個結點的資訊,可以只修改區間端點使每個時間點對應的樹恰好表示該時間的任務優先順序情況。
1.把區間端點全部放入陣列task中排序,起始點時間不變,結束點時間加一。
2.按時間從1到n建樹,每次建樹把task中所有時間為i的結點建到樹里,起始點加入樹(標記為1),結束點在樹中減去(標為-1)
3.直接查詢時間點對應的那棵樹即可
#include#include#include#includeusing namespace std;
typedef long long ll;
int n,dis[100010],cnt=1,rt[100010];
struct task
ll query(int l,int r,int q,int k)
int sum=tree[tree[q].l].v,mid=(l+r)>>1;
if(k<=sum)
return query(l,mid,tree[q].l,k);
else
return tree[tree[q].l].sum+query(mid+1,r,tree[q].r,k-sum);
}int main()
sort(dis+1,dis+m+1);
sort(task+1,task+con);
int ed=unique(dis+1,dis+m+1)-dis-1;
task[con].s=-1;
int id=1;
for(int i=1;i<=n;++i)
if(!f)
rt[i]=rt[i-1];
}while(n--)
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...