【arc073e】Ball Coloring(线段树,贪心)
【arc073e】Ball Coloring(线段树,贪心)
题面
题解
大型翻车现场,菊队完美压中男神的模拟题
首先钦定全局最小值为红色,剩下的袋子按照其中较大值排序。
枚举前面连续的一段是什么颜色,那么此时我们就知道了两种颜色的\(max\),那么只需要考虑蓝色的\(min\)就好了。
答案拆开后变成了\(R_{max}*B_{max}+R_{min}*B_{min}-R_{min}B_{max}-R_{max}B_{min}\)。
此时前三项已知,只需要求最后一项的最大值。
既然要\(B_{min}\)最大的话,那么显然按照较大值排序之后,如果除包含最小值的那一袋的最大值染红,那么前面一段一定选择红色,后面一段一定选择蓝色。
否则必定是前面一段蓝色,中间一个红色,后面又是一段蓝色。
那么线段树维护一下就好了。然而直接维护前缀和后缀最大最小值就好了
写错一堆特判调半天
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 200200
#define lson (now<<1)
#define rson (now<<1|1)
const int inf=1e9;
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,Rmin,Rmax,Bmin,Bmax;ll ans=2e18;
struct Node{int x,y;}a[MAX];
bool operator<(Node a,Node b){if(a.x!=b.x)return a.x>b.x;return a.y>b.y;}
struct SegMentTree
{
int t1[MAX<<2],t2[MAX<<2],a[MAX];
void pushup(int now){t1[now]=max(t1[lson],t1[rson]);t2[now]=min(t2[lson],t2[rson]);}
void Build(int now,int l,int r)
{
if(l==r){t1[now]=t2[now]=a[l];return;}
int mid=(l+r)>>1;
Build(lson,l,mid);Build(rson,mid+1,r);
pushup(now);
}
int Querymx(int now,int l,int r,int L,int R)
{
if(L<=l&&r<=R)return t1[now];
int mid=(l+r)>>1,ret=0;
if(L<=mid)ret=max(ret,Querymx(lson,l,mid,L,R));
if(R>mid)ret=max(ret,Querymx(rson,mid+1,r,L,R));
return ret;
}
int Querymn(int now,int l,int r,int L,int R)
{
if(L<=l&&r<=R)return t2[now];
int mid=(l+r)>>1,ret=1e9;
if(L<=mid)ret=min(ret,Querymn(lson,l,mid,L,R));
if(R>mid)ret=min(ret,Querymn(rson,mid+1,r,L,R));
return ret;
}
}T;
int main()
{
n=read();int mn=1e9;
for(int i=1;i<=n;++i)a[i].x=read(),a[i].y=read();
for(int i=1;i<=n;++i)if(a[i].x<a[i].y)swap(a[i].x,a[i].y);
for(int i=1;i<=n;++i)mn=min(mn,a[i].y);
for(int i=1;i<=n;++i)if(a[i].y==mn){swap(a[i],a[n]);break;}
Rmin=mn;sort(&a[1],&a[n]);
for(int i=1;i<n;++i)T.a[i]=a[i].y;
T.Build(1,1,n-1);
for(int i=1;i<n;++i)
{
Rmax=a[1].x;
Bmax=max(a[n].x,max(T.Querymx(1,1,n-1,1,i),a[i+1].x));
Bmin=min(a[n].x,min(T.Querymn(1,1,n-1,1,i),i==n-1?inf:a[n-1].x));
ans=min(ans,1ll*(Rmax-Rmin)*(Bmax-Bmin));
}
for(int i=1;i<n;++i)
{
Bmax=max(a[n].x,a[1].x);
Rmax=max(T.Querymx(1,1,n-1,1,i),i==n-1?0:max(T.Querymx(1,1,n-1,i+1,n-1),a[i+1].x));
Bmin=min(a[n].x,min(i==n-1?inf:a[i+1].y,i==n-2?inf:a[n-1].x));
ans=min(ans,1ll*(Rmax-Rmin)*(Bmax-Bmin));
}
printf("%lld\n",ans);
return 0;
}
【arc073e】Ball Coloring(线段树,贪心)的更多相关文章
- BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心
BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数 ...
- Bzoj5251 线段树+贪心
Bzoj5251 线段树+贪心 记录本蒟蒻省选后的第一篇题解!国际惯例的题面:首先这个东西显然是一棵树.如果我们把数值排序,并建立这棵树的dfs序,显然dfs序上的一个区间对应数值的一个区间,且根为数 ...
- 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)
传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- codeforces 675E Trains and Statistic 线段树+贪心统计
分析:这个题刚看起来无从下手 但是我们可以先简化问题,首先可以固定起点i,求出i+1到n的最小距离 它可以到达的范围是[i+1,a[i]],贪心的想,我们希望换一次车可以到达的距离尽量远 即:找一个k ...
- hdoj 1556 Color the ball【线段树区间更新】
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1199 Color the Ball(离散化线段树)
Color the Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- BZOJ1805[Ioi2007]Sail船帆——线段树+贪心
题目描述 让我们来建造一艘新的海盗船.船上有 N个旗杆,每根旗杆被分成单位长度的小节.旗杆的长度等于它被分成的小节的数目.每根旗杆上会挂一些帆,每张帆正好占据旗杆上的一个小节.在一根旗杆上的帆可以任意 ...
- BZOJ5249 九省联考2018IIIDX(线段树+贪心)
显然这形成了一个树形结构.考虑这样一种贪心:按照曲目顺序,每次取消其父亲的预留,并选择当前可选择(保证其子树有合法选择且满足预留)的最大值,然后对其子树预留出大于等于他的一些值.这个做法显然是正确的. ...
- BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)
题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...
随机推荐
- PS制作墙壁上海报卷页图片效果
1.首先,打开PS,新建合适的画布. 2.为了使背景具有质感,执行滤镜—滤镜库—纹理化,具体参数按你的感觉来. 3.新建画布“图层1”,为了方便观察,填充为灰色画布,ctrl+t适当缩小画布大小,如图 ...
- iOS使用XZMRefresh实现UITableView或UICollectionView横向刷新
https://blog.csdn.net/u013285730/article/details/50615551?utm_source=blogxgwz6 XZMRefresh The easies ...
- Python云端系统开发入门 pycharm代码
html <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title& ...
- python3 Tkinter GUI 试水
from tkinter import * #导入tkinter下所有包,用于GUI开发#窗口创建tk=Tk()cans=Canvas(tk,width=400,height=400)#定义窗口规格c ...
- js数据放入缓存,需要再调用
再贴代码之前先描述下,这个技术应用的场景:一个页面的http请求次数能少点就少,这样大大提高用户体验.所以再一个页面发起一个请求,把所有数据都拿到后储存在缓存里面,你想用的时候再调用出来,这个是非常好 ...
- C# Note24: 指针的使用
C#为了类型安全,默认并不支持指针.但是也并不是说C#不支持指针,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式.在不安全模式下,我们可以直接操作内存,这样就可以使用 ...
- YAML配置:mapping values are not allowed here
在配置Eureka服务器配置文件的时候,出现了mapping values not allowed here的错误,原因是的冒号 ”:“后面没有空格. 原因分析:yml文件中,键值对是以": ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- CentOS6.8 安装配置Mysql
1.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-commun ...
- 关于IWMS中遇到的问题及解决方法
1.生成的文章上传到外网上,但是没一会儿又变成原来的样子? 解决方案:把上传页面对应的template中的.aspx页面也要上传到外网去.