2015 多校联赛 ——HDU5289(二分+ST)
Assignment
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 148 Accepted Submission(s): 71
ability of any two staff is less than k, and their numbers are continuous. Tom want to know the number of groups like this.
than k. The second line contains n integers:a[1],a[2],…,a[n](0<=a[i]<=10^9),indicate the i-th staff’s ability.
4 2
3 1 2 4
10 5
0 3 4 5 2 1 6 7 8 9
28
First Sample, the satisfied groups include:[1,1]、[2,2]、[3,3]、[4,4] 、[2,3]
给n个数的序列,找出其中有多少[i , j] 满足最大值和最小值的差小于k 枚举左端, if(last>0&&abs(num[i-1]-num[last])<k),last记录的是右端最近不满足情况的那个数,假设 i-1到last不满足条件,则说明在i-1<= x <=last-1必定有 num[x] - num[last] >= k. 所以判断第i个数时先判断i-1,num[i-1]-num[last])<k 则说明必定存在i<= x <=last-1不满足条件,则跳过过这次i判断. (感觉这不是什么正常套路) 官方解: 1. 枚举左端,二分右端,ST求最值 2. 用单调队列维护最值 如果没这个判断则超时,数据真大 - - !! <span style="font-size:18px;">#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib> using namespace std; long long num[101000]; long long s(long long i)
{
return (1+i)*i/2;
} int main()
{
int t, n, k, minx, maxx, last;
long long int re;
//freopen("1002.txt","r",stdin);
scanf("%d", &t);
while(t--)
{
re = 0;
scanf("%d%d", &n, &k);
for(int i=1; i<=n; i++)
{
scanf("%I64d", num+i);
}
last = -1;
for(int i=1; i<=n; i++)
{
if(last>0&&abs(num[i-1]-num[last])<k)
{
continue;
}
minx = num[i];
maxx = num[i];
int j;
for(j=i+1; j<=n; j++)
{
if(abs(num[j]-minx)>=k || abs(num[j]-maxx)>=k)
{
break;
}
else
{
if(num[j]<minx) minx = num[j];
if(num[j]>maxx) maxx = num[j];
}
}
if(last<0)
{
re += s(j-i);
last = j;
}
else if(j>last)
{
re += (s(j-i) - s(last-i));
last = j;
}
}
cout<<re<<endl;
}
return 0;
}< RMQ: #include <cstdio>
#include <iostream> using namespace std; int p[200005];
int dp1[200005][30],dp2[200005][30]; void RMQ_init(int n)
{
for(int i=1; i<=n; i++)
{
dp1[i][0]=p[i];
dp2[i][0]=p[i];
}
for(int j=1; (1<<j)<=n; j++)
{
for(int i=1; i+(1<<j)-1<=n; i++)
{
dp1[i][j]=max(dp1[i][j-1],dp1[i+(1<<(j-1))][j-1]);
dp2[i][j]=min(dp2[i][j-1],dp2[i+(1<<(j-1))][j-1]);
}
}
} int rmq(int x,int y)
{
int k=0;
while((1<<(k+1))<=y-x+1)k++;
return max(dp1[x][k],dp1[y-(1<<k)+1][k])-min(dp2[x][k],dp2[y-(1<<k)+1][k]);
} int main()
{
int T,n,k;
//freopen("1002.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(int i = 1; i <= n; i++)
scanf("%d",&p[i]); long long int num = 0;
RMQ_init(n); int temp = 1;
for(int i = 1; i <= n; i++)
{
while(rmq(temp,i) >= k && temp <i)
temp++;
num += (i-temp+1);
}
printf("%I64d\n",num);
}
return 0;
2015 多校联赛 ——HDU5289(二分+ST)的更多相关文章
- HDU 5289 Assignment(2015 多校第一场二分 + RMQ)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5288 OO's sequence (2015多校第一场 二分查找)
OO's Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 2015 多校联赛 ——HDU5371(manacher + 枚举)
Sample Input 1 10 2 3 4 4 3 2 2 3 4 4 Sample Output Case #1: 9 要求找出一段数字. 将其分成3部分,第①和第②部分成回文字串,第②和第 ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 2015 多校联赛 ——HDU5294(最短路,最小切割)
Tricks Device Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...
- 2015 多校联赛 ——HDU5316(线段树)
Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...
- 2015 多校联赛 ——HDU5323(搜索)
Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
随机推荐
- bzoj 2962 序列操作
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为n的序列, ...
- .net mvc 利用分部视图局部刷新.
页面利于$.Ajax: $(function(){ $("#btnpartview").click(function () { var model = []; model.push ...
- NoSQL简介
相信大家也多多少少了解过一些数据库,最常用的当属MySQL了,当然也这是关系型数据库的代表了 常见的关系型数据库有:MySQL.SQLServer.Oracle 而数据库也有另一个流派-----NoS ...
- 基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...
- PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式
php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大 ...
- 新概念英语(1-67)The weekend
新概念英语(1-67)The weekend What are the Johnsons going to do at the weekend? A:Hello. Were you at the bu ...
- Python3安装Requests
安装Requests费了1天的时间,囧.终于还是在官网找到解决方法,可以参考这个http://docs.python-requests.org/en/latest/user/install/#inst ...
- float和position
float float是欺骗父元素,让其父元素误以为其高度塌陷了,但float元素本身仍处于文档流中,文字会环绕着float元素,不会被遮蔽. absolute 但absolute其实已经不能算是欺骗 ...
- JavaScript实现面向对象
/* js实现面向对象的方法 */ // 1 工厂模型 不推荐 function Person(name , sex , age){ obj = {}; obj.name = name; obj.se ...
- vue组件详解(五)——组件高级用法
一.递归组件 组件在它的模板内可以递归地调用自己, 只要给组件设置name 的选项就可以了. 示例如下: <div id="app19"> <my-compone ...