BZOJ4209 : 西瓜王
首先求出区间前$k$大数中奇数的个数和偶数的个数。
如果都是偶数,那么答案就是前$k$大数的和。
否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数。
主席树维护即可。
时间复杂度$O((n+m)\log n)$。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=300010,M=6000000;
int n,m,i,x,y,k,a[N],b[N],tot,T[N],l[M],r[M],vc[M][2],c[2];long long v[M],sum,ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline int lower(int x){
int l=1,r=n,mid,t;
while(l<=r)if(b[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
int ins(int x,int a,int b,int c,int d){
int y=++tot;
vc[y][0]=vc[x][0],vc[y][1]=vc[x][1];
vc[y][d&1]++,v[y]=v[x]+d;
if(a==b)return y;
int mid=(a+b)>>1;
if(c<=mid)l[y]=ins(l[x],a,mid,c,d),r[y]=r[x];else l[y]=l[x],r[y]=ins(r[x],mid+1,b,c,d);
return y;
}
inline void ask(int x,int y,int k){
int a=1,b=n,mid,t;
c[0]=c[1]=sum=0;
while(a<b){
mid=(a+b)>>1,t=vc[r[x]][0]+vc[r[x]][1]-vc[r[y]][0]-vc[r[y]][1];
if(k<=t)a=mid+1,x=r[x],y=r[y];
else{
k-=t;
c[0]+=vc[r[x]][0]-vc[r[y]][0];
c[1]+=vc[r[x]][1]-vc[r[y]][1];
sum+=v[r[x]]-v[r[y]];
b=mid,x=l[x],y=l[y];
}
}
c[::b[a]&1]+=k,sum+=1LL*::b[a]*k;
}
inline int kth(int x,int y,int k,int p){
int a=1,b=n,mid,t;
while(a<b){
mid=(a+b)>>1,t=vc[r[x]][p]-vc[r[y]][p];
if(k<=t)a=mid+1,x=r[x],y=r[y];else k-=t,b=mid,x=l[x],y=l[y];
}
return ::b[a];
}
int main(){
for(read(n),i=1;i<=n;i++)read(a[i]),b[i]=a[i];
for(sort(b+1,b+n+1),i=1;i<=n;i++)T[i]=ins(T[i-1],1,n,lower(a[i]),a[i]);
read(m);
while(m--){
read(x),read(y),read(k);
if(k>y-x+1){puts("-1");continue;}
ask(T[y],T[x-1],k);
if(c[0]%2==0){printf("%lld\n",sum);continue;}
for(ans=-1,i=0;i<2;i++)
if(c[i]&&c[i^1]<vc[T[y]][i^1]-vc[T[x-1]][i^1])
ans=max(ans,sum-kth(T[y],T[x-1],c[i],i)+kth(T[y],T[x-1],c[i^1]+1,i^1));
printf("%lld\n",ans);
}
return 0;
}
BZOJ4209 : 西瓜王的更多相关文章
- BZOJ:4209: 西瓜王
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209 (虽然仅仅是看在名字的份上,我们还是得说这题是一道) 绝世好题!西瓜王!西瓜王!西瓜 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- NYIST 1006 偷西瓜
偷西瓜 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 对于农村的孩子来说最大的乐趣,莫过于和小伙伴们一块下地偷西瓜了,虽然孩子们条件不是很好,但是往往他们很聪明,他 ...
- BZOJ 4008 【HNOI2015】 亚瑟王
题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我 ...
- Bzoj4008 [HNOI2015]亚瑟王
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1009 Solved: 605[Submit][Status] ...
- C语言与java 20155317 王新玮第二次
20155317 王新玮第二次写作感想 你有什么技能比大多数人(超过90%以上)更好? 刚刚看到这个题目,我的首先想到的是会一些中医,懂得中医的理论框架知识,懂得大部分的中医脉象,能够解决日常生活 ...
- (转)为什么需要正则表达式 by 王珢
为什么需要正则表达式 by 王垠 学习Unix最开头,大家都学过正则表达式(regexp).可是有没有人考虑过我们为什么需要正则表达式? 正则表达式本来的初衷是用来从无结构的字符串中提取信息,殊不知这 ...
- (转)什么是“黑客” by 王珢
什么是“黑客” by 王垠很多程序员自豪的把自己叫做“黑客”(hacker),把编程叫做 hack.可是殊不知,其实在最高级的程序员眼里,“黑客”其实是一个贬义词.他们更愿意被叫做“程序员”(prog ...
- (转)对博士学位说永别 by 王珢
对博士学位说永别 by 王垠 经过深思熟虑之后,我决定再次“抛弃”我的博士学位.这是我第三次决定离开博士学位,也应该是最后一次了.这应该不是什么惊人的消息,因为我虽然读博士10年了,可是我的目标从来就 ...
随机推荐
- php 上传文件实例 上传并下载word文件
上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- ManageEngine Glossary
https://www.manageengine.com/products/applications_manager/help/glossary-applications-manager.html#s ...
- Oracle数据库锁表及解锁进程
下午代码迁移,更新数据库记录时for update语句无法执行,数据库被锁,KILL掉几个进程搞定. Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实 ...
- HTML5学习之跨文档传输消息(七)
新标准中提供了文档之间直接的消息传输API.而且不限制跨域消息传递! 发送消息使用的是Window对象的postMessage(data,targetURL)方法就可以了,但给哪个window对象发送 ...
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)
转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distin ...
- Delphi面向对象---接口
从Delphi3开始支持接口.接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两个方面的内容: 1)一方面是实现这个接口 2)另一方面是定义接口的客户 一个类能够实现多个接 ...
- Spell checker
Spell checker Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- 如何调试SSIS包之跟踪变量赋值
在SSIS开发工具SQL Server Data Tools中提供了调试功能,可以让我们方便的跟踪参数赋值或者数据流条数.本文主要介绍了如何使用SSDT的调试功能. Part A: Script ta ...
- play-framework的安装与使用
一.下载: 到http://www.playframework.com/download下载 解压好包,然后输入: activator ui 访问:http://127.0.0.1:8888/home
- 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了 ...