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; }