202203-2-出行计划

这里是引用在这里插入图片描述

#include<stdio.h>
#include<iostream>
using namespace std;
const int N = 100005;

int main() {
	int time[N] = { 0 };
	int request[N] = { 0 };
	int n, m, k;
	cin >> n >> m >> k;
	int q=0;
	int temp=0,count=0;
	for (int i = 0; i < n; i++) {
		cin >> time[i] >> request[i];
	}

	while (m--) {
		cin >> q;
		temp = q + k;//出报告的时间
		count = 0;
		for (int i = 0; i < n; i++) {
			if (time[i] >= temp) {//查询任务已经出报告
				if ( time[i]-temp+1<= request[i]) 
					count++;//报告在有效期内
			}
		}
		cout << count << endl;
	}
	return 0;
}

运行时间超时只有70分

爆掉了

满分答案是选择了差分前缀和
参考文章
核心:
q+k≤ti≤q+k+ci-1
不妨转化一下:
ti-k-ci+1≤q≤ti-k

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
const int N = 2e5+10;

int main() {
	int n, m, k,p;
	cin >> n >> m >> k;
	int d[N] = { 0 };
	int t, c;
	for (int i = 0; i < n; i++) {
		cin >> t >> c;
		d[max(1, t - k - c + 1)]++;
		d[max(1, t - k+1)]--;
	}
	for (int i = 0; i < N; i++) {
		if(i>=1) d[i] += d[i - 1];
	}
	for (int i = 0; i < m; i++) {
		cin >> p;
		cout << d[p]<<endl;
	}
	return 0;
}

满分答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值