Nastya and Door codeforces 1341 B

Nastya and Door
題意 給一個數列,有正有負沒有0,給定一段子段的長度,求出一段子段中ai-1<ai,ai>ai+1,的ai的個數最多的那個的開始的元素的下標和該段中所含的ai的個數+1的值。
一開始把題意搞錯了,瞎折騰半天。
思路 前綴和,f[i]表示以第i個結尾的元素之前的段所包含的ai的個數,f[i]-f[j]就是截取一段所包含的ai的個數,注意,f[i]-f[j+1],而不是f[i]-f[j],因爲從第j個截取,第j個就一定不是ai,但是他如果是ai,要在f[j+1]才表現出來,靠。。。。。。。。。。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[200005];
int main()
{
    int t;
    scanf("%d",&t);
    int n,k;
    int fr1,fr2;
    int fr3;
    int ans;
    int l=1;
    while(t--)
    {
        memset(f,0,sizeof(f));
        scanf("%d%d",&n,&k);
        scanf("%d%d",&fr1,&fr2);
        for(int i=3;i<=n;i++)
        {
            scanf("%d",&fr3);
            if(fr2>fr1&&fr2>fr3) f[i]=f[i-1]+1;
            else
            {
                f[i]=f[i-1];
            }
            fr1=fr2;
            fr2=fr3;
        }
       /* for(int i=1;i<=n;i++)
        {
            printf("%d ",f[i]);
        }
        printf("\n");*/
        ans=0;
        l=1;
        for(int i=k;i<=n;i++)
        {
            if(ans<f[i]-f[i-k+2])
            {
                ans=f[i]-f[i-k+2];
                l=i-k+1;
            }
        }
        printf("%d %d\n",ans+1,l);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章