某一天,n个朋友在一起聚会,他们已经很久没见了,于是他们决定拍照留念。

简单的说,拍照的时候,每个人有一个高度和宽度,第i个的高度和宽度分别是hi和wi。这些人排成一条直线,照片的最小的面积必须包含所有的的人,所以照片的面积是W*H,W是所有人的宽度之和,H是所有人中高度最高的那个人的高度。现在想要知道当第i个人不在照片中的时候,照片的最小面积是多少。

输入

第一行是一个正整数N,表示人的数量。

接下来N行,每行两个整数wi和hi,分别表示每个人的宽度和高度。

数据范围:2<=N<=200000,1<=wi<=10,1<=hi<=1000。

输出

包含b1,b2,b3。。Bn,bi表示第i个人不在照片中的时候,照片的最小面积。

输入输出样例

输入样例#1:

3

1 10

5 5

10 1

输出样例#1:

75 110 60

输入样例#2:

3

2 1

1 2

2 1

输出样例#2:

6 4 6

【思路1】

利用前缀和记录W 1~i的和 sum[i];

利用前后缀数组分别记录1~i(1≤i≤n)的最大值max1[i] 和i~1(1≤i≤n)的最大值max2[i];

处理第i个人时:W为 sum[n]-sum[i]+sum[i-1],H为max(max1[i-1],max2[i+1]);

相乘即可得出面积

代码:

#include<iostream>
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
inline int read()
{
char chr=getchar();
int f=1,ans=0;
while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=ans*10;ans+=chr-'0';chr=getchar();}
return ans*f; }
int n,w[200005] ,h[200005],sumw[200005],max1[200005],max2[200005];
int main()
{
n=read();
for(int i=1;i<=n;i++)
w[i]=read(),h[i]=read(),sumw[i]=sumw[i-1]+w[i];//前缀和
for(int i=1;i<=n;i++)//1~i最大值
max1[i]=max(max1[i-1],h[i]);
for(int i=n;i>=1;i--)n~i最大值
max2[i]=max(max2[i+1],h[i]);
for(int i=1;i<=n;i++)
{
int W=sumw[n]-sumw[i]+sumw[i-1];
int H=max(max1[i-1],max2[i+1]);//在左右两个区间分别取最大值;
printf("%d ",W*H);
}
return 0;
}

【思路2】

由于每次只有一个人出列,那么对于每个人来说,如果他是最高的,那么H就要取次高的,如果不是次高的,那么H就要取最高的,既然这样,只要记录最大值和次大值便可求出答案;

代码

#include<iostream>
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
inline int read()
{
char chr=getchar();
int f=1,ans=0;
while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=ans*10;ans+=chr-'0';chr=getchar();}
return ans*f; }
int n,w[200005] ,h[200005],sumw[200005],pos,max1=INT_MIN,max2=INT_MIN;
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
w[i]=read(),h[i]=read(),sumw[i]=sumw[i-1]+w[i];
if(max1<h[i])
pos=i,max1=h[i];
}
for(int i=1;i<=n;i++)
if(i!=pos)
max2=max(max2,h[i]);
for(int i=1;i<=n;i++)
{
int W=sumw[n]-sumw[i]+sumw[i-1];
int H;
if(h[i]==max1) H=max2;
else H=max1;
printf("%d ",W*H);
}
return 0;
}

[CodeForces522B] Photo to Remember的更多相关文章

  1. 在 Windows 10 中启用 Windows Photo Viewer

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4727323.html 不知大家在使用了Win10之后有没有这样感受 ...

  2. Autodesk的照片建模云服务—Autodesk ReCap 360 photo 的测试数据

    之前已经给大家介绍过了Autodesk的照片建模云服务—Autodesk ReCap 360 photo, 你也可以自己登录到http://recap360.autodesk.com/ 自己试一试. ...

  3. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)

    在之前的博客中我介绍过Autodesk的照片建模云服务—Autodesk ReCap 360 photo,通过Autodesk ReCap 360 photo,你可以非常方便的通过照片生成三维模型.如 ...

  4. Autodesk的照片建模云服务—Autodesk ReCap 360 photo

    现实捕捉技术方兴未艾,简单的讲现实捕捉技术就是把现实中的现状信息数字化到计算机中以便做进一步的处理.对于不同的应用目的会有不同的捕捉设备,工程或传媒娱乐行业中经常用到的肯定就是三维模型了.那如何得到三 ...

  5. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  6. mongo里面根据对象字段的ID查询 db.Photo.find({'owner.$id':ObjectId('xxxx')}) , 并且使用forEach循环修改查询的数据

    var ones = db.Photo.find({'owner.$id':ObjectId("5344f0dab7c58e8e098b4567")}) db.Photo.find ...

  7. iOS - Photo Album 图片/相册管理

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImagePickerController : UINavigationController <NSCod ...

  8. WordPress Pretty Photo插件‘hashrel’参数跨站脚本漏洞

    漏洞名称: WordPress Pretty Photo插件‘hashrel’参数跨站脚本漏洞 CNNVD编号: CNNVD-201311-405 发布时间: 2013-11-28 更新时间: 201 ...

  9. 数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 116 Descrip ...

随机推荐

  1. 2019 支付宝App支付 --- PHP

    SDK下载:https://docs.open.alipay.com/54/106370/;联系客服:https://cschannel.alipay.com/newPortal.htm?scene= ...

  2. mysql跟java时间类型转换

    参照这个就行了,这个对应注入类型.===========java注入数据库==========java类型 mysql类型 成功与否date date yesdate time nodate time ...

  3. jQuery如何追加tr到table中 添加到头或者尾

    jQuery 添加新内容有以下四个方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() ...

  4. Luogu P2922 秘密消息

    原题 P2922 [USACO08DEC]秘密消息Secret Message 题目描述 Bessie is leading the cows in an attempt to escape! To ...

  5. Matplotlib基础知识

    Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度标签 ...

  6. 【Codeforces 385C】Bear and Prime Numbers

    [链接] 我是链接,点我呀:) [题意] f[i]表示在x[]中有多少个数字是i的倍数 让你求出sum(f[i]) li<=i<=ri 且i是质数 [题解] 做筛法求素数的时候顺便把素数i ...

  7. BZOJ1192 鬼谷子的钱袋

    没想到这是一道省选题... /* BZOJ1192 */ #include <cstdio> int main() { ; scanf("%d",&m); ;m ...

  8. WGS84坐标系图层转火星坐标系(是整个图层转哟,不是转单点坐标)

    开篇唠叨(着急的略过) 大天朝“火星坐标系”小科普:是一种国家保密插件,对真实坐标系统进行人为的加偏处理,将真实的坐标加密成虚假的坐标,加密后的坐标被称为火星坐标系统.所有的电子地图所有的导航设备,都 ...

  9. CF #321 (Div. 2) D

    不说了,爆内存好几次,后来醒起状态有重复... 状压+TSP #include <iostream> #include <cstdio> #include <cstrin ...

  10. TRIZ的成功案例

    这篇採訪稿是几年前的,是TRIZ成功案例离我近期的,由于主人公是我的朋友,请点击查看: 培训后技术难题就攻克了 后记:学了TRIZ并不能让您100%解决您全部遇到的问题,但这样的思想和方法确实是最具操 ...