Codeforces Round #510 (Div. 2) D. Petya and Array

题目链接:http://codeforces.com/contest/1042/problem/D

题意:求区间和<k的个数;

思路:

很多人用线段树或者树状数组做的这道题,但是还有一个很有意思的做法(红黑树)

某一个区间的和,我们可以通过 Sn-Sm 来表示,那么题目的意思就可以变成,Sn - Sm < k 的个数;

假设有 S1 , S2,S3,S4,S5,(S5 = a1+a2+a3+a4+a5),那么3到5的区间和就是 S5-S2;

由Sn-Sm < k 可得,Sn < k+Sm,要想求出以n结尾的所有符合题目意思的个数,就要找出 k+Sm大于Sn的所有Sm的个数,如果换成 公式 -Sm < k-Sn,那么,就要找出所有小于 k-Sn的个数,显然后者要比前者好求一些;因为要求的数在key = k-Sn的前面,我们可以用扫描法,从第一个开始逐步向前遍历,每遍历一次就从先前遍历过的数中找出我们要找的数对应的下标,就是我们要的值;那要如何快速的找出我们要找的Sm的下标呢?最容易想的方法就是二分,每遍历一个数就往容器内放一个数,然后sort然后lower_bound,虽然估计的时间复杂度大概是n*2logn,但是还是会超时;这时候用红黑树去找小于k的个数能快很多,这里介绍的是一个 pb_ds的函数库,现成的红黑树,只需要用insert加入数字,用order_of_key查找小于k的个数,能快就能得出答案;不过要注意的是,很多平台的oj并不适用这个函数库,这里只是觉得有意思才记录下来的,有空的时候,最好还是学学如果手写红黑树;下面给出代码:(因为红黑树不能存入相同的元素,所以用一个pair来存放元素,first是放-Sm的值,second是放一个index来区分相同的元素)

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef tree<pair<long long,int>,null_type,less< pair<long long,int> >,rb_tree_tag,tree_order_statistics_node_update> rbtree;

long long s[200005];

int main (void)
{
	int n,tmp;
	long long t;
	cin >> n >> t;
	s[0] = 0;
	rbtree it;
	it.insert(make_pair(0,0)); //因为红黑树是从0开始计数的,所以这里要先插入一个元素0;
	for (int i = 1; i <= n; ++i) {
		cin >> tmp;
		s[i] = s[i-1]+tmp;
	}
	long long ans = 0;
	for (int i = 1; i <= n; ++i) {
		ans+=it.order_of_key(pair<long long,int> (t-s[i],0));
		it.insert(pair<long long,int> (-s[i],i));
	}
	cout << ans << endl;
	return 0;
 } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产中的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控中心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程中的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值