枚举剩下的分数个数$k$,设最高的$k$个分数和的分子分母分别为$U$和$D$。

那么在选了的里面找到$A=\min(Dt[x]-Up[x])$,没选的里面找到$B=\max(Dt[x]-Up[x])$。

如果$A<B$,则可以更大。

对于$A,B$的计算,可以利用决策单调性分治求解。

时间复杂度$O(n\log n)$。

#include<cstdio>
#include<algorithm>
typedef long long ll;
const int N=50010;
const ll inf=1LL<<60;
int n,i,ans,q[N];ll f[N],g[N];
struct P{int t,p;}a[N],b[N];
inline bool cmp(const P&a,const P&b){return a.t*b.p>b.t*a.p;}
void getf(int l,int r,int dl,int dr){
int m=(l+r)>>1,dm;
f[m]=inf;
for(int i=dl;i<=m&&i<=dr;i++){
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t<f[m])f[m]=t,dm=i;
}
if(l<m)getf(l,m-1,dl,dm);
if(r>m)getf(m+1,r,dm,dr);
}
void getg(int l,int r,int dl,int dr){
int m=(l+r)>>1,dm;
g[m]=-inf;
for(int i=dr;i>m&&i>=dl;i--){
ll t=1LL*a[i].t*b[m].p-1LL*a[i].p*b[m].t;
if(t>g[m])g[m]=t,dm=i;
}
if(l<m)getg(l,m-1,dl,dm);
if(r>m)getg(m+1,r,dm,dr);
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",&a[i].t,&a[i].p);
std::sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)b[i].t=b[i-1].t+a[i].t,b[i].p=b[i-1].p+a[i].p;
getf(1,n-1,1,n),getg(1,n-1,1,n);
for(i=1;i<n;i++)if(f[i]<g[i])q[++ans]=n-i;
for(printf("%d\n",ans),i=ans;i;i--)printf("%d\n",q[i]);
return 0;
}

  

BZOJ1701 : [Usaco2007 Jan]Cow School牛学校的更多相关文章

  1. bzoj 1701 [Usaco2007 Jan]Cow School牛学校

    [Usaco2007 Jan]Cow School牛学校 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 175  Solved: 83[Submit][S ...

  2. BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 215[S ...

  3. BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心

    BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...

  4. 【BZOJ 1697】1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大 ...

  5. BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序

    Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...

  6. 【BZOJ】1697: [Usaco2007 Feb]Cow Sorting牛排序(置换群)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1697 置换群T_T_T_T_T_T_T 很久以前在黑书和白书都看过,,,但是看不懂... 然后找了本 ...

  7. BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换+贪心)

    题面 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都 ...

  8. P1697: [Usaco2007 Feb]Cow Sorting牛排序

    这是一道置换群的裸题=-=,先拿来试试手对着打,以后应该会更加熟练吧! ; var n,i,j,maxx,minx,now,len,cursum,tmin,sum:longint; p:array[. ...

  9. bzoj1697:[Usaco2007 Feb]Cow Sorting牛排序 & bzoj1119:[POI2009]SLO

    思路:以bzoj1119为例,题目已经给出了置换,而每一次交换的代价是交换二者的权值之和,而置换一定是会产生一些环的,这样就可以只用环内某一个元素去置换而使得其余所有元素均在正确的位置上,显然要选择环 ...

随机推荐

  1. WebKit示例解读

    如果你曾经在你的App中使用UIWebView加载网页内容的话,你应该体会到了它的诸多不尽人意之处.UIWebView是基于移动版的Safari的,所以它的性能表现十分有限.特别是在对几乎每个Web应 ...

  2. hadoop namenode ha--手动切换(转)

    1.hadoop的dfs.nameservices如何配置?2.集群配置中hdfs://mycluster的作用是什么?3.如何将namenode2切换为active状态? 在参考本手册前请确保Had ...

  3. EF – 5.DbSet与DbContext,数据更新奥秘

    5.6.4 <DbSet与DbContext> 介绍DbSet与DbContext中的核心属性及重要方法. 5.6.5 <数据更新的奥秘>  这一讲极为重要,因为它揭示出了En ...

  4. Eclipse 控制console

    http://blog.csdn.net/leidengyan/article/details/5686691

  5. ****CodeIgniter使用cli模式运行,把php作为shell编程

    shell简介 在计算机科学中,Shell俗称壳(用来区别于核).而我们常说的shell简单理解就是一个命令行界面,它使得用户能与操作系统的内核进行交互操作. 常见的shell环境有:MS-DOS.B ...

  6. Windows 8使用这半年(企业版)

    2014-06-23 硬件:thinkpad e430c core i5-3210m 4g/500g 1.Windows 8出现开机引导问题 主要开机的时候提示缺少引导文件,按ctrl+alt+del ...

  7. 11g 使用rman duplicate复制数据库,创建辅助实例

    一,创建所需目录 1)创建审计文件目录 PROD1@dbrac1 /dsg/oracle11$ cd $ORACLE_BASE/admin PROD1@dbrac1 /u01/app/oracle/a ...

  8. sqlplus链接数据库报ORA-09925: Unable to create audit trail file

    [localhost.localdomain]:[/oracle11/app/oracle11/product/11.2.0/dbhome_1/dbs]$ sqlplus / as sysdba SQ ...

  9. js 控制展开折叠 div html dom

    js 控制展开折叠 div    html dom <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ...

  10. javascript、正则的验证

    js验证.手机.固话.邮箱.身份证.网址.日期等 Verification.js文件 /* * 手机号码格式 * 只允许以13.15.18开头的号码 * 如:13012345678.159292243 ...