zoukankan      html  css  js  c++  java
  • CSU-1170 A Simple Problem

    题目链接

    http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1170

    题目

    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
    

    Hint

    ​ 由于数据量较大,建议C++选手选用scanf来读取数据。

    题解

    因为题目要求连续的位置,那么我们直接扫一遍即可,初始(l=1,r=1),期间用multiset维护当前序列有多少个数,每次先判断一下multiset里最大数和最小数的差是否大于k,大于的话则则弹出(a[l]),不大于的话则加入(a[r]),顺便统计一下答案的最大值即可

    AC代码

    #include<bits/stdc++.h>
    #include<set>
    #define ll long long
    #define maxn 1000050
    using namespace std;
    ll a[maxn];
    inline ll getnum() {
    	char c; ll ans = 0; ll flag = 1;
    	while (!isdigit(c = getchar()) && c != '-');
    	if (c == '-') flag = -1; else ans = c - '0';
    	while (isdigit(c = getchar())) ans = ans * 10 + c - '0';
    	return ans * flag;
    }
    int main() {
    	ll n, k;
    	multiset<ll> s;
    	while (scanf("%lld%lld", &n, &k) != EOF) {
    		s.clear();
    		for (int i = 1; i <= n; i++) {
    			a[i] = getnum();
    		}
    		int l = 1, r = 1;
    		int ans = 0;
    		s.insert(a[r]);
    		while (r <= n) {
    			ll now = *(--s.end()) - *(s.begin());
    			if (now > k) {
    				multiset<ll>::iterator it;
    				it = s.find(a[l]); l++;
    				s.erase(it);
    			}
    			else {
    				ans = max(r - l + 1, ans);
    				if (r + 1 <= n) s.insert(a[++r]);
    				else break;
    			}
    		}
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
    /**********************************************************************
    	Problem: 1170
    	User: Artoriax
    	Language: C++
    	Result: AC
    	Time:752 ms
    	Memory:56700 kb
    **********************************************************************/
    
    
  • 相关阅读:
    PostgreSql开启远程连接
    Cannot resolve scoped service from root provider
    运行项目报错MSB 401 "RazorTagHelper" 任务意外失败
    win10远程共享文件夹
    Typora 快捷方式给字体设置颜色
    markdown编辑器typora支持图床的功能
    【HTML】二、HTML标签
    【HTML】一、初识HTML
    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法
    markdown语法
  • 原文地址:https://www.cnblogs.com/artoriax/p/10370786.html
Copyright © 2011-2022 走看看