前缀和优化+计蒜客 泡咖啡
題目:
蒜頭君想泡咖啡喝。現在他得到了 nn 份菜譜,每個菜譜上都給了兩個數l,rl,rl,r代表溫度區間在[l,r][l,r][l,r] 度泡出來的咖啡會很好喝。
可是菜譜太多了,蒜頭君一度感到疑惑。經過思考之后他得出了一個結論:某個溫度只要有 k 份或者更多菜譜推薦,那么這個溫度下泡出來的咖啡會很好喝。
現在他給出了 m 個溫度區間,同樣還是用 [l,r][l,r][l,r]表示,現在求問每個區間里面有多少個整數,使得咖啡在這個溫度下泡出來會很好喝?
輸入格式
第一行為三個整數 n,k,m。
第 2~n+12\sim n+12~n+1 行,每行兩個整數,代表菜譜里面的 l,r。
第 n+2~n+m+1n+2\sim n+m+1n+2~n+m+1 行,每行兩個整數,代表待詢問溫度區間里面的 l,r。
輸入的所有數都是正整數且不超過 2×1052\times 10^52×105 ,且滿足 l≤r,k≤nl\le r,k\le nl≤r,k≤n。
輸出格式
對于每個詢問輸出一行,為一個整數,表示有多少可用的溫度。
輸出時每行末尾的多余空格,不影響答案正確性
要求使用「文件輸入輸出」的方式解題,輸入文件為 coffee.in,輸出文件為 coffee.out
樣例輸入1
3 2 4
91 94
92 97
97 99
92 94
93 97
95 96
90 100
樣例輸出1
3
3
0
4
樣例輸入2
2 1 1
1 1
200000 200000
90 100
樣例輸出2
0
分析:
前綴和優化
AC代碼:
#include <bits/stdc++.h> using namespace std; typedef long long ll;const int N=2e5+10;int a[N],sum[N];int main() {freopen("coffee.in", "r", stdin);freopen("coffee.out", "w", stdout);int n,m,k;scanf("%d%d%d",&n,&k,&m);for(int i=0; i<n; ++i){int t1,t2;scanf("%d%d",&t1,&t2);++a[t1]; --a[t2+1];}for(int i=1; i<N; ++i){a[i]=a[i]+a[i-1];if(a[i]>=k) ++sum[i];sum[i]+=sum[i-1];}while(m--){int l,r;scanf("%d%d",&l,&r);printf("%d\n",sum[r]-sum[l-1]);}return 0; }總結
以上是生活随笔為你收集整理的前缀和优化+计蒜客 泡咖啡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020牛客国庆集训派对day2 F题
- 下一篇: 最短路(遍历边)计蒜客—DD坐地铁