csp202203-2出行计划(差分)

题目链接

出发-有效期+1<=做完+等待<=出发
很容易看出来这道题是看每次查询的做完核酸时间+等待时间在多少个区间之内,很容易看出来应该用差分数组做,但是区间左边有可能是负数,所以将不等式整个右移2e5就好了,做题积累的经验太少,不知道数组能开这么大,事实上经过实验,这道题数组开到4e7还没问题,但是开4e8就挂了,当个经验记住吧~~

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int diff[40000005]={0};
int sum[40000005]={0};
int con=200000;

//出发>=做完+等待>=出发-有效期+1
int main() {
    int n,m,k;
    cin >> n >> m >> k;
    int t,c;
    int left,right;
    for(int i=0;i<n;i++){
        scanf("%d %d",&t,&c);
        left=t-c+1+con;
        right=t+con;
        diff[left]+=1;
        diff[right+1]-=1;
    }
    for(int i=1;i<400005;i++){
        sum[i]=sum[i-1]+diff[i];
    }
    int q;
    for(int i=0;i<m;i++){
        scanf("%d",&q);
        q+=k;
        cout << sum[q+con] << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值