将选手和询问按照年龄排序,即可去掉年龄的限制。

将所有选手按水平排序后维护线段树,显然最优解一定是从大到小贪心选择。

线段树上每个节点维护:

$g[0/1]:r+1$不选/选的时候,$l$选不选。

$c[0/1]:r+1$不选/选的时候,中间选了几个。

$s[0/1]:r+1$不选/选的时候,中间选的和。

然后查询的时候在线段树上二分即可。

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

#include<cstdio>
#include<algorithm>
#define N 300010
typedef long long ll;
int n,m,i,j,c[N],pos[N];ll ans[N];
struct P{int x,y,p;}a[N],b[N];
struct T{bool g[2];int c[2];ll s[2];}v[1050000];
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 bool cmp(const P&a,const P&b){return a.x<b.x;}
inline int lower(int x){
int l=1,r=n,mid,t;
while(l<=r)if(c[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
void build(int x,int a,int b){
if(a==b){pos[a]=x;return;}
int mid=(a+b)>>1;
build(x<<1,a,mid),build(x<<1|1,mid+1,b);
}
inline void change(int x,int y){
x=pos[x];
v[x].g[0]=v[x].c[0]=1,v[x].s[0]=y;
for(x>>=1;x;x>>=1)for(int i=0;i<2;i++){
bool j=v[x<<1|1].g[i];
v[x].g[i]=v[x<<1].g[j];
v[x].c[i]=v[x<<1|1].c[i]+v[x<<1].c[j];
v[x].s[i]=v[x<<1|1].s[i]+v[x<<1].s[j];
}
}
inline ll ask(int k){
int x=1,a=1,b=n,mid,o=0;ll ret=0;
while(k){
if(k>=v[x].c[o]){ret+=v[x].s[o];break;}
if(a==b)break;
mid=(a+b)>>1;
x=x<<1|1;
if(k<=v[x].c[o])a=mid+1;
else{
k-=v[x].c[o];
ret+=v[x].s[o];
o=v[x].g[o];
b=mid;
x--;
}
}
return ret;
}
int main(){
read(n);
for(i=1;i<=n;i++)read(a[i].x),read(a[i].y),c[i]=a[i].y;
read(m);
for(i=1;i<=m;i++)read(b[i].x),read(b[i].y),b[i].p=i;
std::sort(a+1,a+n+1,cmp);
std::sort(b+1,b+m+1,cmp);
std::sort(c+1,c+n+1);
build(1,1,n);
for(i=j=1;i<=m;i++){
while(j<=n&&a[j].x<=b[i].x)change(lower(a[j].y),a[j].y),j++;
ans[b[i].p]=ask(b[i].y);
}
for(i=1;i<=m;i++)printf("%lld\n",ans[i]);
return 0;
}

  

BZOJ3022 : [Balkan2012]The Best Teams的更多相关文章

  1. 【BZOJ】3022: [Balkan2012]The Best Teams

    原题链接 题面 (为啥这题没有题面-- 给出\(N\)个人,和年龄\(age_{i},skill_{i}\) 然后给出\(M\)个询问,就是年龄在\(a\)以下选不超过\(k\)个人 要求选择的人水平 ...

  2. BZOJ 3022 [Balkan2012]The Best Teams(扫描线+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3022 [题目大意] 给定n个球员,第i个球员年龄为AGEi,水平为SKILLi. 没有 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. Rnadom Teams

    Rnadom  Teams 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.actioncid=88890#problem/B 题目: Descript ...

  5. URAL 1208 Legendary Teams Contest(DFS)

    Legendary Teams Contest Time limit: 1.0 secondMemory limit: 64 MB Nothing makes as old as years. A l ...

  6. timus 1106 Two Teams(二部图)

    Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...

  7. CF478 B. Random Teams 组合数学 简单题

    n participants of the competition were split into m teams in some manner so that each team has at le ...

  8. UVA 11609 Teams 组合数学+快速幂

    In a galaxy far far away there is an ancient game played among the planets. The specialty of the gam ...

  9. SCAU 07校赛 10317 Fans of Footbal Teams

    10317 Fans of Footbal Teams 时间限制:1000MS  内存限制:65535K 题型: 编程题   语言: 无限制 Description Two famous footba ...

随机推荐

  1. 没有系列化导致错误:java.io.NotSerializableException: com.bjpowernode.bean.Team

    java.io.NotSerializableException: com.bjpowernode.bean.Team Cause: java.io.NotSerializableException: ...

  2. Expected one result (or null) to be returned by selectOne(), but found: 3

    Expected one result (or null) to be returned by selectOne(), but found: 3 返回应该是对象但是给的是list

  3. Django-model聚合查询与分组查询

    Django-model聚合查询与分组查询 聚合函数包含:SUM AVG MIN MAX COUNT 聚合函数可以单独使用,不一定要和分组配合使用:不过聚合函数一般和group by 搭配使用 agg ...

  4. 【C++ Primer | 03】字符串、向量和数组

    博客链接: c++ 中 const_iterator 和 const vector<>::iterator的区别 const vector <int> ::iterator和v ...

  5. php接收base64图片并保存

    header("Content-Type: text/html; charset=utf-8"); /*print_r($_FILES)*/;//所有传入的图片都在files这个数 ...

  6. [转]基于国家标准的 EndNote 输出样式模板 ----直接用endnote导入到word,不用自己一个个改参考文献了

    EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著 ...

  7. [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop

    http://blogger.gtwang.org/2013/10/awesome-indicator-applets-for-ubuntus-unity-desktop.html http://ww ...

  8. C# 之 下载EXCEL文件,自动用迅雷下载aspx

    在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...

  9. python全栈开发day67--字段类型、字段属性、ORM回顾

    一.回顾总结 https://www.cnblogs.com/maple-shaw/articles/9323320.html 1. 视图 1. CBV 和 FBV from django.views ...

  10. Java中String直接赋字符串和new String的区别(面试常考)

    摘取自:https://www.cnblogs.com/guozhenqiang/p/5633269.html 解析Java中的String对象的数据类型 1. String是一个对象.  因为对象的 ...