模拟

来源:互联网 发布:zepto.js的animate 编辑:程序博客网 时间:2024/06/11 18:32

Code Forces Round #450 (Div 2) c Remove Extro One

题意:一个无重复数字序列,删除一个数使得record个数最多

record:a【i】是【1..i】中最大的数


题解

枚举删除第i个数字。
想想删掉这个数字后会有什么影响?
首先,如果a[i]如果是a[1..i]中最大的数字
那么record会减少1.
其次。对于任意一个a[j] , i小于j a[i]是a[1..j]中最大的数字,且a[j]是a[1..j]中第二大的数字
删掉a[i]后,a[j]会成为一个record,即record数递增。

#include<bits/stdc++.h>using namespace std;const int N=1e5+5;int mx=-1,mx2,n,res;//mx序列中最大的数,mx2序列中第二大的数int a[N];int main(){    scanf("%d",&n);    for(int i=0;i<n;i++)    {        int x;        scanf("%d",&x);        if(x>mx)        {            mx2=mx;            mx=max(mx,x);            a[x]--;        }        else if(x>mx2)        {//序列中最大的数不变,出现了新的第二大的数,删除mx则record++            a[mx]++;            mx2=max(mx2,x);        }    }    int mn=0x3f3f3f;    //找到贡献最大,且自身值最小的element    for(int i=1;i<=n;i++)    {        if(a[i]>mn)        {            mn=a[i];            res=i;        }    }    cout<<res<<endl;    return 0;}

样例说明

序列:1 2 5 3 4
当x=3时 删除5 增加一个record
当x=4时 删除5 增加一个record。

原创粉丝点击