1448. Antimonotonicity
2011-05-19 13:08 Min·zc 阅读(322) 评论(0) 编辑 收藏 举报
1 /*
2 *使用tmp来记录队列的最后一个数flag来记录数列是应该增还是减
3 *如果数列要增
4 * 1.如果数列要增那么如果下一个数字比tmp大,那么成立,ans加一,flag变为减
5 * 2,如果下一个数比cmp小,那么就把当前队列的最后一个数cmp换成小的那个数,因为我们需要找的数字要比队列的最后一个数字大,
6 * 所以如果队列的最后一个数字越小,那么比他大的数字就越好找,所以长度就越长。因为对于队列尾的形式为 大小(tmp)大(待求),
7 * 所以如果我们将cmp换成一个比他小的数也不会影响原来的队列,原来队列的长度ans不变
8 *数列要减的情况同上
9 *
10 *
11 */
12
13 #include <iostream>
14
15
16 #include <memory.h>
17 using namespace std;
18 int n;
19 int main()
20 {
21 int t;
22 cin>>t;
23 while(t--)
24 {
25 int ans=1;
26 int tmp;
27 int flag=1;
28 cin>>n>>tmp;
29 for(int i=1;i<n;i++)
30 {
31 int b;
32 cin>>b;
33 if(flag)
34 {
35 if(b<tmp)
36 {
37 tmp=b;
38 ans++;
39 flag=0;
40 }
41 else
42 tmp=b;
43 }
44 else
45 {
46 if(b>tmp)
47 {
48 tmp=b;
49 ans++;
50 flag=1;
51 }
52 else
53 tmp=b;
54 }
55 }
56 cout<<ans<<endl;
57 }
58 }
2 *使用tmp来记录队列的最后一个数flag来记录数列是应该增还是减
3 *如果数列要增
4 * 1.如果数列要增那么如果下一个数字比tmp大,那么成立,ans加一,flag变为减
5 * 2,如果下一个数比cmp小,那么就把当前队列的最后一个数cmp换成小的那个数,因为我们需要找的数字要比队列的最后一个数字大,
6 * 所以如果队列的最后一个数字越小,那么比他大的数字就越好找,所以长度就越长。因为对于队列尾的形式为 大小(tmp)大(待求),
7 * 所以如果我们将cmp换成一个比他小的数也不会影响原来的队列,原来队列的长度ans不变
8 *数列要减的情况同上
9 *
10 *
11 */
12
13 #include <iostream>
14
15
16 #include <memory.h>
17 using namespace std;
18 int n;
19 int main()
20 {
21 int t;
22 cin>>t;
23 while(t--)
24 {
25 int ans=1;
26 int tmp;
27 int flag=1;
28 cin>>n>>tmp;
29 for(int i=1;i<n;i++)
30 {
31 int b;
32 cin>>b;
33 if(flag)
34 {
35 if(b<tmp)
36 {
37 tmp=b;
38 ans++;
39 flag=0;
40 }
41 else
42 tmp=b;
43 }
44 else
45 {
46 if(b>tmp)
47 {
48 tmp=b;
49 ans++;
50 flag=1;
51 }
52 else
53 tmp=b;
54 }
55 }
56 cout<<ans<<endl;
57 }
58 }