把一个人看成二维平面上的一个点,把一个K[i]看成左上角为(0,+max),右下角为(K[i],K[i])的一个矩阵,那么可以很好地描述人对于询问是否合法(我也不知道他怎么想到这东西的)

然后把一组询问排序,按照K[i]从小到大依次处理,定义一个取点的方式为尽量取纵坐标小的点,那么可以构造出一种方案使得对于每一块区域不能取的点的最大纵坐标递减

(我也不知道他怎么想到这东西的)

单调栈维护每一块被取过的点的最大纵坐标,那么随着K[i]的增大,区域会被合并

二维平面数点,主席树

#include<cstdio>
#include<algorithm>
using namespace std;
int N,n,cnt,tree[10000005],sz[200005],h[200005],stack[200005],K[200005],root[500005],ls[10000005],rs[10000005];
struct node{
int x,y;
}e[1000005];
bool cmp(node a,node b){
return a.x<b.x;
}
void insert(int pre,int &now,int l,int r,int ID){
now=++cnt;
tree[now]=tree[pre]+1;
ls[now]=ls[pre];
rs[now]=rs[pre];
if (l==r) return;
int mid=(l+r)>>1;
if (ID<=mid) insert(ls[pre],ls[now],l,mid,ID);
else insert(rs[pre],rs[now],mid+1,r,ID);
}
int query_K(int pre,int now,int l,int r,int K){
if (l==r) return l;
int mid=(l+r)>>1;
int ANS=tree[rs[now]]-tree[rs[pre]];
if (ANS>=K) return query_K(rs[pre],rs[now],mid+1,r,K);
else return query_K(ls[pre],ls[now],l,mid,K-ANS);
}
int query(int pre,int now,int l,int r,int K){
if (!now) return 0;
if (l==r) return tree[now]-tree[pre];
int mid=(l+r)>>1;
if (K<=mid) return tree[rs[now]]-tree[rs[pre]]+query(ls[pre],ls[now],l,mid,K);
else return query(rs[pre],rs[now],mid+1,r,K);
}
int main(){
scanf("%d",&n);
for (int i=1; i<=n; i++) scanf("%d%d",&e[i].x,&e[i].y);
sort(e+1,e+n+1,cmp);
N=n+1;
int head=1;
for (int i=1; i<=N; i++){
root[i]=root[i-1];
while (head<=n && e[head].x==i) insert(root[i],root[i],1,N,e[head++].y);
}
int q;
scanf("%d",&q);
while (q--){
int m;
scanf("%d",&m);
for (int i=1; i<=m; i++) scanf("%d",&K[i]);
sort(K+1,K+m+1);
int top=0;
for (int i=1; i<=m; i++){
while (top && h[top]<K[i]) top--;
int Sz=sz[top];
Sz+=query(root[K[stack[top]]],root[K[i]],1,N,K[i])-K[i];
if (Sz<0){
printf("0\n");
break;
}
else if (i==m){
printf("1\n");
break;
}
int H=query_K(root[K[stack[top]]],root[K[i]],1,N,Sz-sz[top]);
while (H>h[top] && top){
top--;
H=query_K(root[K[stack[top]]],root[K[i]],1,N,Sz-sz[top]);
}
stack[++top]=i;
sz[top]=Sz;
h[top]=H;
}
}
return 0;
}

  

BZOJ 4369: [IOI2015]teams分组的更多相关文章

  1. BZOJ4369 : [IOI2015]teams分组

    将分组计划按照$k$从小到大排序,维护一个单调栈,每个元素为一个矩形,按最底下元素从高到低排列,栈顶最低. 每次加入一个矩形可选区域,维护单调栈,可以往回合并. 然后将所有最低点不满足的矩形取出,合并 ...

  2. [BZOJ 2989]数列(二进制分组+主席树)

    [BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...

  3. Bzoj 4371: [IOI2015]sorting排序 二分

    题目 似乎很久没写题解了... 这题是校里胡策的时候的题,比赛因为评测机有点慢+自己代码常数大没快读...被卡t了,但是bzoj上还是A了的...,因为bzoj时限比较宽可以不卡常. 题解: 首先可以 ...

  4. BZOJ 1190 梦幻岛宝珠(分组01背包)

    跑了7000ms... 这是个体积和价值都超大的背包.但是体积保证为a*2^b的(a<=10,b<=30)形式.且n<=100. 于是可以想到按b来分组.这样的话每组最多为a*n*2 ...

  5. BZOJ 1296 粉刷匠(分组背包套DP)

    刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令dp[ ...

  6. bzoj 4398 福慧双修——二进制分组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...

  7. BZOJ 4140 凸包+二进制分组

    思路: $(x_0-x)^2+(y_0-y)^2<=x^2+y^2$ $y>=(-x_0/y_0)x+(x_0^2+y_0^2)/2y0$ 这显然就是凸包了 以一个斜率不断向下(上)走   ...

  8. BZOJ 4368: [IOI2015]boxes纪念品盒

    三种路径,左边出去左边回来,右边出去右边回来,绕一圈 绕一圈的路径最多出现一次 那么绕一圈的路径覆盖的点一定是左边半圈的右边和右边半圈的左边 枚举绕一圈的路径的起始点(一定要枚举,这一步不能贪心),更 ...

  9. bzoj 4398 福慧双修 —— 二进制分组+多起点最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 按二进制每一位是 0/1 把 1 号点的儿子分成两组,分别作为起点和终点跑多起点最短路 ...

随机推荐

  1. 手动添加日期到mysql数据库

    //获得jsp页面上的数据 String dates=request.getParameter("dates"); //使用预定格式将日期转换为字符串 SimpleDateForm ...

  2. 字符串和byte数组的相互转化

    关于byte[]数组转十六进制字符串: public static String getHexString(byte[] b) throws Exception { String result = & ...

  3. Java实现将GBK编码格式的文件夹中所有文件都转化为UTF-8格式的文件,编码格式转化

    package CodeConvert; import Java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  4. 《移动Web前端高效开发实战》笔记2——使用Gulp构建一个ECMAScript 6和Sass应用

    8.3.1 安装和配置 运行Gulp需要Node.js环境,请参看第二章内容搭建Node.js环境.使用NPM全局安装Gulp,命令如下: npm install gulp-cli –g 然后,在项目 ...

  5. nodejs学习8:windows连接mongodb出现的错误解决办法

    今天遇到了在windows下连接mongodb错误的情况,因为之前安装是正常的,而重启的电脑之后就再也连接不上.于是在群里求助了下,无果,查阅了官网的英文文档,终于有些眉目了,故此一记. 先吐槽下命令 ...

  6. GoDaddy网站程序根目录 网站文件上传到虚拟主机哪个目录

    用的linux虚拟主机,网站根目录为public_html,(window主机的目录为httpdocs)我们需要把本地做好的网站上传到此目录下 cPanel控制面板 - 文件管理器 - public_ ...

  7. Flash图表FusionCharts如何自定义图表导出菜单或界面

    FusionCharts的导出组件界面有两种模式: Compact Mode: 用于保存单张图片,每一个单独的导出组件实例都代表单独的图表.在这种模式下,只有一个按钮和标题是可见的. Full Mod ...

  8. MySql5.7主从配置

    记录 环境:ubuntu16.04,mysql5.7 主机:192.168.1.240,192.168.1.241:241为Salve 1.安装mysql sudo apt-get install m ...

  9. javascript报错:ReferenceError: $ is not defined解决办法

    原因很简单,要么是未导入jquery包,要么是导入的顺序不对. 例如,我在制作Chrome扩展程序时,其中的一块代码如下: 然后运行时报上述错误. 解决方法:我们不难发现script位置有问题,因为$ ...

  10. Ecshop首页购物车数量调取问题

    在page_header.lbi中调用SQL: <?php $sql = 'SELECT SUM(goods_number) AS number' . ' FROM ' . $GLOBALS[' ...