nyoj-1316-二分
- 描述
-
才发现编故事背景那么难,原谅当初语文考满分的我。对于区间[L, R](L <= R)而言,它的长度是R - L + 1,区间和则是a[L] + ... + a[R]。区间元素的下标是从1开始的。如:序列{5 2 1 1 3 1 4}区间[2 4]的长度是3,区间[2, 5]的区间和 = 2 + 1 + 1 + 3 = 7。现在Ocean用程序随机生成了一个序列,该序列一共有N个整数。对于这个序列,他想知道区间长度 >= L且满足区间和 >= M的不同区间有多少个?对于两个区间[x1, y1]和[x2, y2],若x1 != x2 或者 y1 != y2则可以认为两个区间是不同的。
- 输入
- 第一行输入一个整数T,代表有T组测试数据。
每组数据占两行,第一行依次输入三个整数N,L,M分别代表上面提到的信息。
下面一行输入N个整数ai。注:1 <= T <= 100,1 <= L <= N <= 10000,-100000 <= M,ai <= 100000。
- 输出
- 对每组测试数据,输出一个整数代表最后的结果。
- 样例输入
-
3
1 1 1
1
4 2 3
1 2 3 4
6 3 -7
-1 -2 -3 4 -5 6 - 样例输出
-
1
6
10 - 来源
- 第七届河南理工大学程序设计大赛
- 上传者
- liuyuqiang
- 一开始的思路是先将[1,L],[1,L+1]......[1,N]这几个区间push进容器中,然后每次固定一个起点,从1开始,显然我们可以让M每次加上起点之前的前缀和,抵消之后就等价于区间和变为了以当前起点为左边界的区间。然后二分查找满足条件的区间个数,同时每次都要把区间长度最小的那个区间pop出去,因为每次
- 区间长度都等价于自动减一(由于左边界的右移)。
- 但是在一个连续的有序序列中删除节点的复杂度是O(N),可以逆向来想,我们从左边界的最大值开始枚举,慢慢的减小到1,这样前面满足的区间在后面依旧满足我们要做的是每次添加进去一个区间即可,添加时用了insert函数,复杂度按理说也是O(N),但stl还是比自己写的快把。
#include<bits/stdc++.h>
using namespace std;
int a[],pre[];
int main()
{
int T,L,M,N,i,j,k;
cin>>T;
while(T--){
vector<int>q;
cin>>N>>L>>M;
for(i=;i<=N;++i){
scanf("%d",a+i);
pre[i]=pre[i-]+a[i];
}
int ans=;
for(i=N;i>=L;i--){
int p=lower_bound(q.begin(),q.end(),pre[i])-q.begin();
q.insert(q.begin()+p,pre[i]);
vector<int>::iterator x=lower_bound(q.begin(),q.end(),M+pre[i-L]);
ans+=q.end()-x;
}
cout<<ans<<endl;
}
return ;
}
nyoj-1316-二分的更多相关文章
- nyoj 310二分+dinic
#include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...
- nyoj 306 二分+dfs
#include<stdio.h> #include<string.h> #define N 200 int Min(int a,int b) { return a>b? ...
- poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分
poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...
- NYOJ 720 DP+二分
项目安排 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个 ...
- NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...
- nyoj 214——单调递增子序列(二)——————【二分搜索加dp】
单调递增子序列(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...
- nyoj 214
//nyoj 214 这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符 这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路 用类似于栈的方式,来存储每次更新 ...
- POJ 2728 Desert King(最优比例生成树 二分 | Dinkelbach迭代法)
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 25310 Accepted: 7022 Desc ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
随机推荐
- 文件下载(StreamingHttpResponse流式输出)
文件下载(StreamingHttpResponse流式输出) HttpResponse会直接使用迭代器对象,将迭代器对象的内容存储成字符串,然后返回给客户端,同时释放内存.可以当文件变大看出这是一个 ...
- Css选择器定位详解
1.使用 class 属性来定位元素,方法如下: driver.findElement(By.cssSelector("input.login")); 即可以先指定一个 HTML的 ...
- 【我的Android进阶之旅】Android插件化开发学习资料
1.目前开源的插件开发框架大致有哪些? 1. 任玉刚 的 dynamic-load-apk Github 地址:https://github.com/singwhatiwanna/dynamic-lo ...
- Java Synchronized 与 ThreadLocal 异同
同:都是为了线程安全 异:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问.而ThreadLocal为每一个线程都提供了变量的副本, 使得每个线程在某一时间访问到的并 ...
- 安装RabbitMQ3.6.10报错:{error,{missing_dependencies,[crypto,ssl],
参考https://blog.csdn.net/u010739551/article/details/80848993 如果安装上篇博文安装则可避免这种情况 CentOS6.7安装RabbitMQ3. ...
- 003-基于URL的权限管理[不使用shiro]
一.基于url权限管理流程[实现步骤] 基于url拦截是企业中常用的权限管理方法,实现思路是:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter ...
- web项目的getContextPath()
伯乐一看小编的这个博文的标题是不是觉得有些小,以点到面,知道了web中getContextPath()这种获取路径的方式,显然其他的方式的是可以以此类推的.常说,工作学习找共同点嘛. 上一段我们也提高 ...
- WPF MVVM模式下ComboBox级联效果 选择第一项
MVVM模式下做的省市区的级联效果.通过改变ComboBox执行命令改变市,区. 解决主要问题就是默认选中第一项 1.首先要定义一个属性,继承自INotifyPropertyChanged接口.我这里 ...
- Spark机器学习1·编程入门(scala/java/python)
Spark安装目录 /Users/erichan/Garden/spark-1.4.0-bin-hadoop2.6 基本测试 ./bin/run-example org.apache.spark.ex ...
- 双摄像头测距的OpenCV实现
http://blog.csdn.net/scyscyao/article/details/5562024 版权声明:本文为博主原创文章,未经博主允许不得转载. 虽然最近注意力已经不可遏制地被神经科学 ...