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\n",sum+1); } return 0; }
