P1567 统计天数题解

最后更新于 2025-08-02 21:01:57
分类 个人记录

P1567 统计天数题解

问题分析

题目要求我们找到最高气温一直上升的最长连续天数。我们需要遍历给定的气温序列,找出其中最长的一个子序列,使得该子序列中的每一天的气温都严格大于前一天的气温。

解决方案

  1. 读取输入
    • 首先读取整数 $N$,表示气温数据的数量。
    • 然后读取 $N$ 个非负整数,存储在数组 $a$ 中。
  2. 计算连续上升天数
    • 使用一个变量 $k$ 来记录当前连续上升的天数。
    • 使用另一个数组 $b$ 来记录每一天结束时的连续上升天数。
    • 遍历气温数组 $a$,比较相邻两天的气温:
      • 如果当天的气温大于前一天的气温,则 $k$ 增加 1,并将 $k$ 的值存入数组 $b$ 中对应的位置。
      • 否则,重置 $k$ 为 1,并将 $k$ 的值存入数组 $b$ 中对应的位置。
  3. 寻找最大值
    • 初始化一个变量 $max$ 为 0,用于记录最长的连续上升天数。
    • 遍历数组 $b$,更新 $max$ 为数组 $b$ 中的最大值。
  4. 输出结果
    • 最后,输出 $max$ 的值,即最长的连续上升天数。

代码实现

下面是完整的 C++ 代码实现:

#include<bits/stdc++.h>
using namespace std;
int a[10000000] , b[10000000];
int main(){
    int k=1, n=0,max;
    cin >> n;
    for(int i=0; i<n; i++){
    	cin >> a[i];
	}
    for(int i=0; i<n; i++){
        if(a[i]<a[i+1]){
            k++;
            b[i]=k; 
        }else{
            k=1;
            b[i]=k;
        }
   	}
    max=b[1];	
    for(int i=0; i<n; i++){
        if(max<b[i]){
        	max=b[i];
		}     	
	}   
    cout << max << endl;   
    return 0;
}