zoukankan      html  css  js  c++  java
  • 扶桑号战列舰

     扶桑号战列舰

    时间限制: 1 Sec  内存限制: 128 MB  Special Judge

    题目描述

    众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据“个舰优越主义”,建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只。
    同时,扶桑号战列舰也是舰岛最为科幻的战列舰。
    当然,要建造这样的舰船,科技水平是必须的。
    同样众所周知的是,德意志科学技术天下第一,所以IJN的司令官从德国学来了一种先进的建船方法。
    一只战舰横过来可以看做一个长度为n的序列,每个位置有一个数ai表示这个位置设计的高度。这种先进的造船技术可以每次将一个区间[l,r]内的所有位置高度都+1,求到达最终设计状态的最少操作次数。
    如果你不能及时完成的话,IJN司令官会奖励你去参加苏里高海战。(m,n<=1e5)

    输入

    第一行包含一个整数n,表示序列的长度。
    第二行包含n个非负整数a1,a2,a3,…,an,表示最终的状态。

    输出

    输出的第一行是一个正整数m,表示最少的操作次数。
    接下来m行每行两个正整数li,ri,表示一次操作。
    你需要保证1≤li≤ri≤n。
    保证最少次数m≤105,输出可以以任意顺序输出。

    样例输入

    6
    2 3 3 3 3 3
    

    样例输出3

    1 6
    1 6
    2 6

    代码
     1 #include <bits/stdc++.h>
     2 #define maxn 100002
     3 #define ll long long
     4 using namespace std;
     5 int arr[maxn];
     6 stack<int> stc;
     7 int main()
     8 {
     9     int n;
    10     scanf("%d",&n);
    11     ll ans=0;
    12     for(int i=1; i<=n; i++)
    13     {
    14         scanf("%d",&arr[i]);
    15         if(arr[i]>arr[i-1])ans=ans+(arr[i]-arr[i-1]);
    16     }
    17     printf("%lld
    ",ans);
    18     for(int i=1;i<=n;i++)
    19     {
    20         if(arr[i]>arr[i-1])
    21         {
    22             for(int j=arr[i];j>arr[i-1];j--)stc.push(i);
    23         }
    24         if(arr[i]>arr[i+1])
    25         {
    26             int j=arr[i];
    27             while(j>arr[i+1]&&!stc.empty())
    28             {
    29                 printf("%d %d
    ",stc.top(),i);
    30                 stc.pop();
    31                 j--;
    32             }
    33         }
    34     }
    35     return 0;
    36 }
    
    
    
     
  • 相关阅读:
    web开发:jquery高级
    web开发:jquery初级
    web开发:javascript之dom与bom
    web开发:javascript案例
    web开发:javascript动画
    web开发:javascript高级
    web开发:javascript操作
    web开发:javascript基础
    web开发:形变、表格及多行文本操作
    web开发:动画及阴影
  • 原文地址:https://www.cnblogs.com/CharlieWade/p/11301056.html
Copyright © 2011-2022 走看看