poj2459+luogu2879 差分两题

做这样的小题最适合我,普及-:)
poj读不懂原文,只好抄抄抄了,所以抄完题意,代码也一起抄啦!
 

/*
农夫想要在第D天的时候剩下F2千克的草,而他一共有F1千克的草,如果他将草投放到农场就会有牛来吃草,所以他想知道在第几天的时候放他的F1千克的草料到农场上,才能让他的草料在第D天的时候剩下F2千克 
Input 
第一行为四个整数C,F1,F2,D分别表示牛的数量,农夫拥有的草的数量,农夫在第D天剩余草的数量和天数D,之后C行每行两个整数表示该头牛在农场上出现的时间段 
Output 
输出农夫放草料的时期 
--------------------- 
原文:https://blog.csdn.net/v5zsq/article/details/46833687 
版权声明:本文为博主原创文章,转载请附上博文链接!
*/
#include <iostream>
#include <cstdio>
using namespace std;
int n,l,r,d,mx,k,s,x,y;

int sum[2005];
int work() {
	cin>>n>>r>>l>>d;
	for(int i=1; i<=n; i++) {
		scanf("%d%d",&x,&y);
		sum[x]++,sum[y+1]--;
	}
	s=r-l;
	for(int i=1; i<=d; i++)
		sum[i]+=sum[i-1];
	for(int i=d; i>=1; i--) {
		s-=sum[i];
		if(s==0)return i;	
	}
}
int main() {
	cout<<work()<<endl;
	return 0;
}

洛谷2879,最开始一看跟车站分级差不多啊,可以拓扑,但是n^2的时间复杂度。又想差分可以,第一遍没有处理可能重复的数据,第一次50分,处理完重复就ac了,车站分级是不是也可以这么写。
 

#include<iostream>
#include<stdio.h>
#include<stdlib.h> 
using namespace std;
const int N=1e4+1;
int n ,l,r,m,d[N],s=0;
bool map[N][N];
int main(){
	int x,y;
	scanf("%d%d%d%d",&n,&l,&r,&m);
	for(int i=1;i<=m;i++) {
		scanf("%d%d",&x,&y);
		if(x>y)swap(x,y);
		if(map[x][y])continue;
		map[x][y]=1;
		d[x+1]-=1;
		d[y]+=1;	
	}
	for(int i=1;i<=n;i++){
		s+=d[i];
		printf("%d\n",r+s);
	}
	
	
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值