BZOJ1691: [Usaco2007 Dec]挑剔的美食家
一句话题解:贪心+treap
好几天前刚学的treap,然后真到了考treap又写不出来,这么辣鸡还搞什么OI
先按$A_i$递减排序,然后把$C_i$也递减排序,然后用一个指针指向$M$序列,遍历$N$序列,这样的话每次所找到的元素必定是$A_i \leq B_i$的
这样我们就可以专注于$B_i$和$D_i$的关系,这个关系我们用平衡树维护就行了,Treap就是个不错的选择。每次插入合法的$C_i$,然后累加每个最优的$C_i$
具体参考代码:
//OJ 1939
//by Cydiater
//2016.9.10
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <ctime>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
;
const ll oo=0x3f3f3f3f;
inline ll read(){
,f=;
;ch=getchar();}
+ch-';ch=getchar();}
return x*f;
}
,tol=,tmp;
ll ans=;
struct _data{
int x,y;
}a[MAXN],b[MAXN];
struct tree{
int leftt,rightt,v,siz,cnt,rnd;
}t[MAXN];
namespace solution{
inline bool cmpfory(_data x,_data y){return x.y>y.y;}
inline void updata(int k){t[k].siz=t[t[k].leftt].siz+t[t[k].rightt].siz+t[k].cnt;}
void init(){
N=read();M=read();
up(i,,N){
a[i].x=read();a[i].y=read();
}
up(i,,M){
b[i].x=read();b[i].y=read();
}
sort(a+,a+N+,cmpfory);
sort(b+,b+M+,cmpfory);
}
void lefturn(int &k){
int tt=t[k].rightt;t[k].rightt=t[tt].leftt;t[tt].leftt=k;
t[tt].siz=t[k].siz;updata(k);k=tt;
}
void righturn(int &k){
int tt=t[k].leftt;t[k].leftt=t[tt].rightt;t[tt].rightt=k;
t[tt].siz=t[k].siz;updata(k);k=tt;
}
void insert(int &k,int v){
){
k=++tol;t[k].leftt=t[k].rightt=;
t[k].rnd=rand();t[k].v=v;t[k].siz=t[k].cnt=;
return;
}
t[k].siz++;
if(t[k].v==v){
t[k].cnt++;
return;
}
if(v<t[k].v){
insert(t[k].leftt,v);
if(t[k].rnd>t[t[k].leftt].rnd)righturn(k);
}else if(v>t[k].v){
insert(t[k].rightt,v);
if(t[k].rnd>t[t[k].rightt].rnd)lefturn(k);
}
}
void nxt(int k,int v){
)return;
if(t[k].v>=v){
tmp=t[k].v;
nxt(t[k].leftt,v);
}else nxt(t[k].rightt,v);
}
void del(int &k,int v){
)return;
if(v==t[k].v){
){
t[k].cnt--;
t[k].siz--;
return;
}
){
k=t[k].leftt+t[k].rightt;
return;
}
if(t[t[k].leftt].rnd<t[t[k].rightt].rnd){
righturn(k);
del(k,v);
}else{
lefturn(k);
del(k,v);
}
}
else if(v<t[k].v){
t[k].siz--;
del(t[k].leftt,v);
}else{
t[k].siz--;
del(t[k].rightt,v);
}
}
void slove(){
;
up(i,,N){
while(b[j].y>=a[i].y&&j<=M)
insert(root,b[j++].x);
tmp=-;
nxt(root,a[i].x);ans+=tmp;
){
puts("-1");
exit();
}
del(root,tmp);
}
}
void output(){
cout<<ans<<endl;
}
}
int main(){
//freopen("input.in","r",stdin);
using namespace solution;
init();
slove();
output();
;
}
另外,这个会爆ll
BZOJ1691: [Usaco2007 Dec]挑剔的美食家的更多相关文章
- [BZOJ1691][Usaco2007 Dec]挑剔的美食家
[BZOJ1691][Usaco2007 Dec]挑剔的美食家 试题描述 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了. ...
- bzoj1691[Usaco2007 Dec]挑剔的美食家 平衡树treap
Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了.现在,Farmer John不得不去牧草专供商那里 ...
- 【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查 ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )
按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...
- BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心
BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...
- 「BZOJ1691」[Usaco2007 Dec] 挑剔的美食家 (Treap)
Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了.现在,Farmer John不得不去牧草专供商那里 ...
- 【BZOJ】1691: [Usaco2007 Dec]挑剔的美食家(set+贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1691 懒得打平衡树了.... 而且multiset是很快的... 排到了rank1 T_T 贪心就是 ...
- 1691: [Usaco2007 Dec]挑剔的美食家
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 621 Solved: 280[Submit][Status][Discuss] Description ...
随机推荐
- EF增删改查操作
增 using (StudentEntities ent = new StudentEntities()) { User aNewUser = new User() { Age = , Name = ...
- 用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...
- ThreadLocal类学习笔记
这个类在java1.2中就出现了,线程独有的变量(每个线程都有一份变量),使用它的好处之一就是可以少传许多参数. 在哪里用到它呢?有连接池的地方就有它的身影,连接池包括数据库连接池,网络连接池等. i ...
- [AJAX系列]$.get(url,[data],[fn],[type])
$.get(url,[data],[fn],[type]) 概述 通过远程HTTP GET请求载入信息 参数 url:待载入页眉的URL地址 data:待发送key/value参数 callback: ...
- 64-who 简明笔记
显示已登录用户的信息 who [options] who am i who程序显示在本地系统上登录的用户的信息.这些信息包括每个用户的用户名.终端设备.登录时间和相应的远程主机名(如果可应用) 参数 ...
- rabbitmq 相关方法
//连接$conn_args = array( 'host'=>'127.0.0.1' , 'port'=> '5672', 'login'=>'guest' , 'password ...
- 网上找到的一个jquery版网页换肤特效
这个跟我之前在锋利的JQuery那本书里看到的那个一模一样. <!DOCTYPE html> <html> <head> <meta name="& ...
- ubuntu下nginx的启停等常用命令
开发过程中,我们会经常的修改nginx的配置文件,每次修改配置文件都可以先测试下本次修改的配置文件是否正确,可以利用以下命令: ? 1 service nginx -t -c /alidata/ser ...
- yum命令安装mysql
linux下使用yum安装mysql,以及启动.登录和远程访问. 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没 ...
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】
最近在学习Spring+SpringMVC+MyBatis的整合.以下是参考网上的资料自己实践操作的详细步骤. 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...