Intervals of Monotonicity

来源:互联网 发布:unity3d 间隔重复执行 编辑:程序博客网 时间:2024/06/05 10:17

1346. Intervals of Monotonicity

Time limit: 1.0 second
Memory limit: 64 MB
It’s well known that a domain of any continuous function may be divided into intervals where the function would increase monotonically or decrease monotonically. A number of intervals of such a partition we will call a complexity of the partition. A complexity of a continuous function is the minimal possible complexity of partition in the domain into the monotonicity intervals.
The notion of complexity may be defined not only for continuous functions. In particular, it is applicable to the functions specified on a grid.

Input

The input contains a description of a function F, specified on a grid. The first line contains two numbers A and B — the first and the last point of the integer grid with step 1 (0 ≤ A < B ≤ 100 000). The second line contains the values table of the function F. The table consists of the integers F(A), F(A+1), …, F(B) separated with a space and/or linefeeds. All the values of the function F are in diapason from –100 000 to 100 000.

Output

Output the only number — the complexity of the function F.

Sample

inputoutput
1 101 2 3 4 2 1 -1 3 6 7
3
/**贪心**/#include <cstdio>#include <cstring>#define MAX 100010int a,b,n,pre,m[MAX],dp[MAX];int main(){    while(scanf("%d%d",&a,&b)!=EOF)    {        n=b-a+1;        int i,j;        scanf("%d",&m[1]);        pre=m[1];        for(i=2,j=2; i<=n; i++)//一开始在这里总是错,原来是严格单调,不能有重复数字        {            scanf("%d",&m[j]);            if(m[j]!=pre)            {                pre=m[j];                j++;            }        }        n=j-1;        dp[1]=dp[2]=1;        for(i=3; i<=n;)        {            if((m[i]>=m[i-1]&&m[i-1]>=m[i-2]) || (m[i]<=m[i-1]&&m[i-1]<=m[i-2]))//一次判断三个,就可以判断单调性            {                dp[i]=dp[i-1];                i++;            }            else            {                dp[i]=dp[i-1]+1;                dp[i+1]=dp[i];                i+=2;            }        }        printf("%d\n",dp[n]);    }    return 0;}


原创粉丝点击