BZOJ2264 : Free Goodies
如果Jan先手,那么可以放入一个对Petra来说价值$inf$的物品,就变成了Petra先手。
对于Petra来说,拿物品的顺序是固定的,按这个顺序排序。
那么如果把Petra的选择看成$($,Jan的选择看成$)$,一个合法的方案对应了一个合法括号序列。
因此贪心选取$\lfloor\frac{n}{2}\rfloor$个价值最大的右括号,同时保证不破坏括号序列合法性即可,线段树维护。
时间复杂度$O(n\log n)$。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1010,M=2050;
int T,n,i,k,x,ansa,ansb,vs[M],vb[M],tag[M];char U[9];
struct P{int a,b;}a[N];
inline bool cmp(const P&a,const P&b){return a.a==b.a?a.b<b.b:a.a>b.a;}
inline void add1(int x,int p){vs[x]+=p,tag[x]+=p;}
inline void pb(int x){if(tag[x])add1(x<<1,tag[x]),add1(x<<1|1,tag[x]),tag[x]=0;}
inline int merge(int x,int y){return a[x].b>a[y].b?x:y;}
inline void up(int x){
vs[x]=min(vs[x<<1],vs[x<<1|1]);
vb[x]=merge(vb[x<<1],vb[x<<1|1]);
}
void build(int x,int a,int b){
tag[x]=0;
if(a==b){vs[x]=vb[x]=a;return;}
int mid=(a+b)>>1;
build(x<<1,a,mid),build(x<<1|1,mid+1,b),up(x);
}
void add(int x,int a,int b,int c){
if(c<=a){add1(x,-2);return;}
pb(x);
int mid=(a+b)>>1;
if(c<=mid)add(x<<1,a,mid,c);
add(x<<1|1,mid+1,b,c);
up(x);
}
void change(int x,int a,int b,int c){
if(a==b){vb[x]=0;return;}
pb(x);
int mid=(a+b)>>1;
if(c<=mid)change(x<<1,a,mid,c);else change(x<<1|1,mid+1,b,c);
up(x);
}
int askmax(int x,int a,int b,int c){
if(c<=a)return vb[x];
pb(x);
int mid=(a+b)>>1,t=0;
if(c<=mid)t=askmax(x<<1,a,mid,c);
t=merge(t,askmax(x<<1|1,mid+1,b,c));
up(x);
return t;
}
int right(int x,int a,int b){
if(vs[x]>1)return 0;
if(a==b)return a;
pb(x);
int mid=(a+b)>>1,t=right(x<<1|1,mid+1,b);
if(!t)t=right(x<<1,a,mid);
up(x);
return t;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%s",&n,U);
for(i=1;i<=n;i++)scanf("%d%d",&a[i].a,&a[i].b),ansa+=a[i].a;
if(U[0]=='J'){
n++;
a[n].a=1010;
a[n].b=0;
}
sort(a+1,a+n+1,cmp);
build(1,1,n);
for(i=n/2;i;i--){
k=right(1,1,n);
x=askmax(1,1,n,k+1);
ansa-=a[x].a;
ansb+=a[x].b;
change(1,1,n,x);
add(1,1,n,x);
}
printf("%d %d\n",ansa,ansb);
ansa=ansb=0;
}
return 0;
}
BZOJ2264 : Free Goodies的更多相关文章
- Free Goodies UVA - 12260 贪心
Free Goodies Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu [Submit ...
- Free Goodies UVA - 12260
Petra and Jan have just received a box full of free goodies, and want to divide the goodies between ...
- [Uva12260]Free Goodies(dp+贪心)
解题关键:先对p进行排序,消除p的影响,然后对w进行01背包即可.注意p对w的约束.j<=(cur+1)/2 #include<cstdio> #include<cstring ...
- EntityFramework 6 + Mysql 生成POCOs
问题 使用EDMX文件 EF Power Tools参数不正确的解决方法 对于"异常来自 HRESULT:0x80070057 (E_INVALIDARG)",有方法说" ...
- JavaScript资源大全中文版(Awesome最新版)
Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...
- UTFGrid
UTFGrid UTFGrid is a specification for rasterized interaction data. As of version 1.2, it was remove ...
- [Android]使用自定义JUnit Rules、annotations和Resources进行单元测试(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5795091.html 使用自定义JUnit Rules.ann ...
- jquery autocomplete插件
jquery autocomplete插件 https://goodies.pixabay.com/jquery/auto-complete/demo.html autocomplete-table ...
- poj3311 Hie with the Pie (状态压缩dp,旅行商)
Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3160 Accepted: 1613 ...
随机推荐
- High level GPU programming in C++
https://github.com/prem30488/C2CUDATranslator http://www.training.prace-ri.eu/uploads/tx_pracetmo/GP ...
- C# 汉字与区位码之间的相互转换(中文数字字母可以,支持空格,但是特殊字符未来得及测试)
using System; using System.Text; namespace Test { class MainClass { /// <summary> /// 中文空白字符,用 ...
- redis拾趣(客户端连接,keys命令,数据备份,缓存有效期等)
1.客户端连接 为了安全保护,redis支持绑定IP跟端口,这个通过conf配置文件中的bind跟port来设置. 绑定后登录client控制台时就需要写明ip(或者hostname)跟端口了,如: ...
- P3567 [POI2014]KUR-Couriers
题目描述 Byteasar works for the BAJ company, which sells computer games. The BAJ company cooperates with ...
- nagios系列(一)centos6.5环境部署nagios服务端
nagios软件安装包存放目录:/home/oldboy/tools nagios服务安装目录:/usr/local/nagios 1.配置yum源 echo "------ step 1: ...
- 用javascript判断当前是安卓平台还是ios平台
通常判断运行环境都是通过navigator.userAgent if (/android/gi.test(navigator.userAgent)){ // todo : android} if (/ ...
- C#中的预处理指令详解
这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...
- icomet研究
官方文档https://github.com/ideawu/icomet/wiki 如何实现的长连接:noop: 心跳消息+HTTP endless chunk 以班级ID为主键,进行班级通道的创建: ...
- tomcat启动慢解决方案
一.环境 centos6.7 tomcat8 jdk1.8 二.现象 启动tomcat会花费10多分钟,正常情况下几秒就可以了. 三.解决办法 度娘了一下是因为jdk在生成随机数上耗时,找到j ...
- java连接数据库(jdbc)调用配置文件
各种语言都有自己所支持的配置文件,后缀名“.properties”结尾的就是其中之一. 在java连接数据库时,采取读取配置文件的方式,来获取数据库连接. 新建jdbc.properties文件,内容 ...