180418 Karen and Coffee 题解
題目描述
Karen 喜歡咖啡。
她有?n?本食譜,第?ii?本食譜包含兩個(gè)數(shù)?l[i],r[i],表示這本食譜推薦用 [l[i],r[i]]之間的溫度(包含?l_i.r_ili?.ri?)來(lái)煮咖啡。
Karen 認(rèn)為一個(gè)溫度?aa?是可接受的當(dāng)且僅當(dāng)有?\ge k≥k?本食譜推薦用?aa?來(lái)煮咖啡。
Karen 有?kq?個(gè)問(wèn)題,每個(gè)問(wèn)題用一對(duì)正整數(shù)?a_i,b_iai?,bi??來(lái)表示,表示她問(wèn)?[a_i,b_i][ai?,bi?]?之間有多少個(gè)溫度是可接受的。
輸入格式
第一行包含3個(gè)整數(shù)n,k,q,其中1<=k<=n<=200000,1<=q<=200000。
接下來(lái)的n行,每行包含2個(gè)整數(shù)l和r,其中1<=l<=r<=200000。
再接下來(lái)有q行,每行包含2個(gè)整數(shù)a和b,其中1<=a<=b<=200000。
輸出格式
共q行,每行一個(gè)整數(shù),表示可接受溫度的個(gè)數(shù)。
樣例輸入
3 2 4 91 94 92 97 97 99 92 94 93 97 95 96 90 100樣例輸出
3 3 0 4樣例輸入
2 1 1 1 1 200000 200000 90 100樣例輸出
0問(wèn)題提示
此題可用差分+前綴和實(shí)現(xiàn)。
思路:
1.根據(jù)食譜推薦溫度,每個(gè)溫度推薦食譜數(shù)量+1(差分)
? ? 統(tǒng)計(jì)每個(gè)溫度推薦的食譜數(shù)量
2.統(tǒng)計(jì)區(qū)間內(nèi)可接受的溫度數(shù)量
? ? ? ? ? 1.判斷該溫度是否接受 1
? ? ? ? ? 2.不可接受 0
? ? ? ? ? 3.利用前綴和統(tǒng)計(jì)總數(shù)
于是問(wèn)題就解決了
接下來(lái)上代碼!
#include <iostream> using namespace std; #define int long long #define F(i,a,b) for(int i=(a);i<=(b);i++) #define R(i,a,b) for(int i=(a);i>=(b);i--) const int N=200005; int n,k,m,l,r,sum=0; int a[N],s[N];//a[N]為某溫度推薦的食譜數(shù)量,s[N]為前i溫度可接受溫度的總數(shù) signed main() {//讀入數(shù)據(jù) scanf("%lld%lld%lld",&n,&k,&m);F(i,1,n){//讀入數(shù)據(jù) scanf("%lld%lld",&l,&r);//差分,根據(jù)食譜推薦溫度,每個(gè)溫度推薦食譜數(shù)量+1 a[l]++;a[r+1]--;}//前綴和求解修改后的內(nèi)容F(i,1,N-5) a[i]+=a[i-1];F(i,1,N-5){//如果溫度可接受,可接受溫度數(shù)量加一 if(a[i]>=k) s[i]=s[i-1]+1;//如果不可接受,繼承上一可接受溫度數(shù)量 else s[i]=s[i-1];}F(i,1,m){//讀入數(shù)據(jù) cin>>l>>r;//利用前綴和求出區(qū)間內(nèi)可接受溫度 cout<<s[r]-s[l-1]<<"\n";}return 0; }總結(jié)
以上是生活随笔為你收集整理的180418 Karen and Coffee 题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java异步编程详解
- 下一篇: 是什么铸造了褚时健一生中的过失与成功?