【题解】bzoj2457 贪心+排序

题目链接
大概思路倒是晓得,代码实现还是有点迷。
大佬题解写的非常好

#include<cstdio>
#include<algorithm>
using namespace std;
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
const int N=2e5+10;
int n,ans,mx[N],mi[N],cnt,now=0x7fffffff;
bool flag=true;
struct node{
    int num,id;
    bool operator <(const node&rhs)const{
    return num<rhs.num||(num==rhs.num&&id<rhs.id);}
}a[N];
int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%d",&n);
    _rep(i,1,n)scanf("%d",&a[i].num),a[i].id=i;
    sort(a+1,a+n+1);
    _rep(i,1,n)if(i==1||a[i].num!=a[i-1].num)mx[cnt]=a[i-1].id,mi[++cnt]=a[i].id;
    mx[cnt]=a[n].id;
    _rep(i,1,cnt)if(!flag)//处于递减 
    {
        if(now>mx[i])now=mi[i];
        else now=mx[i],flag=true;
    }
    else//处于递增 
    {
        if(now<mi[i])now=mx[i];
        else flag=false,now=mi[i],ans++;
    }
    printf("%d\n",ans);
    return 0;
}
展开阅读全文

没有更多推荐了,返回首页