C. Day at the Beach---cf559

http://codeforces.com/problemset/problem/599/C

题目大意: 有n个城堡的高度   让你最多分成几个块   每个块排过序之后 整体是按照升序来的

分析:  i之前的最大值只要小于等于i之后的最小值  ans++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <math.h>
#include <ctype.h>

using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 500100
typedef long long  ll;
const double ESP = 1e-8;
#define INF 0xfffffff

int a[N];
int l[N],r[N];

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(l,0);
        memset(r,0);
        memset(a,0);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            l[i]=max(l[i-1],a[i]);
        }
        r[n]=a[n];
        for(int i=n-1;i>0;i--)
        {
            r[i]=min(r[i+1],a[i]);
        }
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            if(l[i]<=r[i+1])
                sum++;
        }
        printf("%d
",sum+1);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/linliu/p/5448254.html