CSUOJ 1170 A sample problem
Posted buerdepepeqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSUOJ 1170 A sample problem相关的知识,希望对你有一定的参考价值。
J: A Simple Problem
Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 87 Solved: 12
Description
在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢?
Input
输入包含若干组数据。每组数据的第一行有2个正整数,N(1<=N<=10^6),K(0<=K<=10^6),其中N、K的含义同上,接下来一行一共有N个32位有符号整数(32-bit signed integer),依次描绘了这个数列中各个整数的值。
Output
对于每组数据,输出一个正整数,表示在这个数列中最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K。
Sample Input
4 2 3 1 5 2 3 2 3 1 2
Sample Output
2 3
#include<cstdio> #include<iostream> #include<cmath> #include<string.h> #include<algorithm> #include<vector> #include<map> #include<set> using namespace std; typedef long long ll; char s[10],c[10]; const int MAXN=1000005; ll A[MAXN]; int main(){ ll x,y; ll maxx=-1,minn=999999; /*set和multiset 会根据特定的排序准则, 自动将元素排序。两者不同之处, 在于multiset允许元素重复,而set不允许重复*/ multiset<ll> ss; while(scanf("%lld%lld",&x,&y) !=EOF){ for(int i=0;i<x;i++){ scanf("%lld",&A[i]); } ll nlen=0; ll maxi=0,mini=0; ll left=0,right=0; ss.insert(A[0]); while(right != x){ maxx=*(--ss.end()); minn=*ss.begin(); if(maxx-minn<=y){ nlen=right-left+1>nlen?right-left+1:nlen; ss.insert(A[++right]); } else{ auto pos=ss.find(A[left++]); ss.erase(pos); } } cout<<nlen<<endl; ss.clear(); } return 0; }
以上是关于CSUOJ 1170 A sample problem的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 1170 Shopping Offers (五维DP)
hdu 1028 Sample Ignatius and the Princess III (母函数)
mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Length