如果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的更多相关文章

  1. Free Goodies UVA - 12260 贪心

      Free Goodies Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit ...

  2. Free Goodies UVA - 12260

    Petra and Jan have just received a box full of free goodies, and want to divide the goodies between ...

  3. [Uva12260]Free Goodies(dp+贪心)

    解题关键:先对p进行排序,消除p的影响,然后对w进行01背包即可.注意p对w的约束.j<=(cur+1)/2 #include<cstdio> #include<cstring ...

  4. EntityFramework 6 + Mysql 生成POCOs

    问题 使用EDMX文件 EF Power Tools参数不正确的解决方法 对于"异常来自 HRESULT:0x80070057 (E_INVALIDARG)",有方法说" ...

  5. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  6. UTFGrid

    UTFGrid UTFGrid is a specification for rasterized interaction data. As of version 1.2, it was remove ...

  7. [Android]使用自定义JUnit Rules、annotations和Resources进行单元测试(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5795091.html 使用自定义JUnit Rules.ann ...

  8. jquery autocomplete插件

    jquery autocomplete插件 https://goodies.pixabay.com/jquery/auto-complete/demo.html autocomplete-table ...

  9. poj3311 Hie with the Pie (状态压缩dp,旅行商)

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3160   Accepted: 1613 ...

随机推荐

  1. dblink 退出 session

    以dblink的表现为例,我一直认为dblink的远程连接session仅在操作(select,dml)发生时短期存在,在操作完成后依据一定条件保留或退出. 而事实并非如此,随便使用一个远程查询语句如 ...

  2. android 手机拍照返回 Intent==null 以及intent.getData==null

    手机拍照第一种情况:private void takePicture(){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Si ...

  3. Java基础99 待续

    1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...

  4. Oracle12c 性能优化攻略:攻略1-2:创建具有最优性能的表空间

    问题描述:    1:表空间是存储数据库对象(例如索引 .表)的逻辑容器.    2:在创建数据库对象不为其指定存储属性,则相应的表和索引会自动继承表空间的存储特性.    故:若需要好的索引.表的性 ...

  5. Java中BigDecimal类介绍及用法

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  6. hdu 1542 线段树+扫描线 学习

    学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一 ...

  7. Spring之配置文件bean作用域的详细介绍

    Spring的配置文件applicationContext.xml中bean作用域的详细介绍: 1:对象的创建:单例和多例        scope="singleton",默认值 ...

  8. Ubuntu 安装 OpenMPI

    1. 下载OpenMPI 在官网上下载最新版本的安装包,如:openmpi-1.8.4.tar.gz 2. 解压并进行配置 tar -zxvf openmpi-3.0.0.tar.gz cd open ...

  9. python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业

    一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...

  10. PHP函数比较变量

    作为一个PHPer,一定要多看PHP手册,每过一遍手册,你总会发现一些以前被你忽略的一些东西:我们可以从各个不同的地方/渠道学习到PHP的相关知识,但也不要忘记我们的手册,PHP手册永远是学习和提升P ...