JZOJ 1264. 乱头发节

traveller-ly 2018-07-19 原文

JZOJ 1264. 乱头发节

Description

  农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都意识到自己凌乱不堪的发型,FJ 希望统计出能够看到其他牛的头发的牛的数量。   每一头牛 i有一个高度 h[i] (1 <= h[i] <= 1,000,000,000)而且面向东方排成一排(在我们的图中是向右)。因此,第i头牛可以看到她前面的那些牛的头,(即i+1, i+2,等等),只要那些牛的高度严格小于她的高度。
       每一头牛 i有一个高度 h[i] (1 <= h[i] <= 1,000,000,000)而且面向东方排成一排(在我们的图中是向右)。因此,第i头牛可以看到她前面的那些牛的头,(即i+1, i+2,等等),只要那些牛的高度严格小于她的高度。
例如这个例子:
        =
=       =
=       =
=   –   =           牛面向右侧 –>
=   =   =
= – = = =
= = = = = =
1 2 3 4 5 6

牛#1 可以看到她们的发型 #2, 3, 4
牛#2 不能看到任何牛的发型
牛#3 可以看到她的发型 #4
牛#4 不能看到任何牛的发型
牛#5 可以看到她的发型 6
牛#6 不能看到任何牛的发型!
让 c[i] 表示第i头牛可以看到发型的牛的数量;请输出 c[1] 至 c[N]的和。如上面的这个例子,正确解是3 + 0 + 1 + 0 + 1 + 0 = 5。

 

Input

Line 1: 牛的数量 N。
Lines 2..N+1: 第 i+1 是一个整数,表示第i头牛的高度。

Output

  Line 1: 一个整数表示c[1] 至 c[N]的和。
 

Sample Input

6
10
3
7
4
12
2

Sample Output

5
 
做法:维护一个高度不上升的队列,并更新队列中每个高度对应的牛能看到的头发的数量。
 
代码如下:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <string>
 4 #include <iostream>
 5 #define N 80007
 6 #define LL long long
 7 using namespace std;
 8 LL h[N], n, ans;
 9 struct arr
10 {
11     int x, hi;
12 }f[N];
13 
14 LL read()
15 {
16     LL s = 0;
17     char ch = getchar();
18     while (ch < '0' || ch > '9')    ch = getchar();
19     while (ch >= '0' && ch <= '9')    s = s * 10 + ch - '0', ch = getchar();
20     return s;
21 }
22 
23 int main()
24 {
25     freopen("badhair.in", "r", stdin);
26     freopen("badhair.out", "w", stdout);
27     n = read();
28     for (int i = 1; i <= n; i++)
29         h[i] = read();
30     int head = 1, tail = 0;
31     f[++tail].hi = h[n];
32     for (int i = n - 1; i >= 1; i--)
33     {
34         int l = 0, ac = 0;
35         for (int j = tail; j >= head; j--)
36             if (h[i] > f[j].hi)
37             {
38                 ac += f[j].x + 1;
39                 l++;
40             }
41             else break;
42         tail = tail - l + 1;
43         f[tail].hi = h[i];
44         f[tail].x = ac;
45         ans += ac;
46     }
47     cout << ans;
48     fclose(stdin);
49     fclose(stdout);
50 }

View Code

 

 

 
发表于 2018-07-19 21:15 执迷于沿途风景的旅人 阅读() 评论() 编辑 收藏

 

版权声明:本文为traveller-ly原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/traveller-ly/p/9338460.html

JZOJ 1264. 乱头发节的更多相关文章

  1. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    JZOJ 4269. 【NOIP2015模拟10.27】挑竹签 4269. 【NOIP2015模拟10.27】 […]...

  2. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    JZOJ 3462. 【NOIP2013模拟联考5】休息(rest) 3462. 【NOIP2013模拟联考5 […]...

  3. JZOJ 3385. 【NOIP2013模拟】黑魔法师之门

    JZOJ 3385. 【NOIP2013模拟】黑魔法师之门 3385. 【NOIP2013模拟】黑魔法师之门  […]...

  4. JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO)

    JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO) 3382. 【NOIP201 […]...

  5. JZOJ 2136. 【GDKOI2004】汉诺塔

    JZOJ 2136. 【GDKOI2004】汉诺塔 2136. 【GDKOI2004】汉诺塔 (Standar […]...

  6. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C 3509. 【NOIP2013模拟11. […]...

  7. JZOJ 3223. 【HBOI2013】Ede的新背包问题

    JZOJ 3223. 【HBOI2013】Ede的新背包问题 3223. 【HBOI2013】Ede的新背包问 […]...

  8. JZOJ 1266. 玉米田

    JZOJ 1266. 玉米田 1266. 玉米田(cowfood.pas/c/cpp) (File IO):  […]...

随机推荐

  1. Bootstrap Blazor 初体验

    Bootstrap Blazor 初体验 自微软去年发布blazor以来,我也一直关注着blazor的动态,从 […]...

  2. Oracle DataGuard主备切换(switchover)

    Oracle DataGuard主备切换可以使用传统的手动命令切换,也可以使用dgmgr切换,本文记录手动切换 […]...

  3. tkinter使用之简单登陆注册界面

    import tkinter as tkimport tkinter.messageboximport pic […]...

  4. 【高可用架构】待部署的架构介绍

    目的 本文主要有以下两点: 一. 架构介绍 二. 往期回顾 内容 一. 架构介绍 高可用:简单的来说就是硬件故 […]...

  5. 金融领域常用的数据分析方法 – 11-21

    金融领域常用的数据分析方法 1.策略的收紧与放松 策略放松:命中率方法                     […]...

  6. 美马里兰州一家公民协会选举宠物狗当主席

    美国马里兰州一家公民协会成员发现一年前选举的主席竟是一只宠物狗。   美国合众国际社19日报道,马里兰州这家公 […]...

  7. 程序员30岁以后的发展迷途

    程序员30岁以后的发展迷途 刚进IT行业时,小张有股火一般的热情,参与了很多项目,而且都成功了。公司对他也很器 […]...

  8. MyBatis从入门到精通(十三):使用discriminator鉴别器映射

    MyBatis从入门到精通(十三):使用discriminator鉴别器映射 2019-07-19 11:50 […]...

展开目录

目录导航