分析:

有点套路的状压题

很显然,最多logV层,所以可以记录每一层的选取状态(第一层保证不能选)。
定义f1(mask)f1(mask)f1(mask)表示选取状态为mask时,从最左端开始连续覆盖的最右端。
定义f2(mask)f2(mask)f2(mask)表示选取状态为mask时,从最右端开始连续覆盖的最左端。

之所以要分成两段,是因为最终我们要判断从某一段开始,能否全部覆盖,所以最开始一个区间类似于询问,对每个询问,枚举左侧的选取状态,得到右侧对应的选取状态,然后看两段能否覆盖到当前这一段。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 1000010
#define INF 0x3FFFFFFF
using namespace std;
int n,v,logv;
int x[MAXN];
int f1[MAXN],f2[MAXN];
int l[22][MAXN],r[22][MAXN],cnt[22];
int find_l(int x,int pos){pos++;int now=upper_bound(l[x]+1,l[x]+1+cnt[x],pos)-l[x];now--;if(now<=0)return pos;return max(r[x][now],pos-1);
}
int find_r(int x,int pos){pos--;int now=lower_bound(r[x]+1,r[x]+1+cnt[x],pos)-r[x];if(now>cnt[x])return pos;return min(l[x][now],pos+1);
}
int ans[MAXN];
int main(){memset(f2,0x3f3f3f3f,sizeof f2);SF("%d%d",&n,&v);for(int i=1;i<=n;i++)SF("%d",&x[i]); x[0]=-INF;x[n+1]=INF;for(logv=0;(1<<logv)<=v;logv++);logv++;for(int i=0;i<logv;i++){int v1=v>>i;cnt[i]=1;l[i][cnt[i]]=1;for(int j=1;j<=n;j++)if(x[j+1]-x[j]>v1){r[i][cnt[i]]=j;cnt[i]++;l[i][cnt[i]]=j+1;  }cnt[i]--;}if(cnt[0]>logv){for(int i=1;i<=n;i++)PF("Impossible\n");return 0;    }f1[0]=0;f2[0]=n+1;for(int mask=0;mask<(1<<logv);mask+=2)for(int i=1;i<logv;i++)if((mask&(1<<i))!=0){f1[mask]=max(f1[mask],find_l(i,f1[mask^(1<<i)]));f2[mask]=min(f2[mask],find_r(i,f2[mask^(1<<i)]));   }for(int i=1;i<=cnt[0];i++){int lft=l[0][i];int rit=r[0][i];for(int mask=0;mask<(1<<logv);mask+=2){int mask2=((1<<logv)-2)^mask;if(f1[mask]>=lft-1&&f2[mask2]<=rit+1){ans[i]=1;break;}}}int las=1;for(int i=1;i<=n;i++){if(i>r[0][las])las++;if(ans[las]==0)PF("Impossible\n");elsePF("Possible\n");}
}

【DP】AGC012 E Camel and Oases相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  7. BestCoder冠军赛 - 1005 Game 【DP】

    [题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...

  8. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  9. zzuliOJ 1894: 985的方格难题 【dp】

    1894: 985的方格难题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 369  Solved: 75 Description 985走入了一个n ...

最新文章

  1. 软件开发环境-按应用范围分类
  2. tensorflow 代码阅读
  3. 5G NR RLC:RLC架构和RLC entity
  4. 开源视频会议bigbluebutton
  5. js 位运算符 ~, ,| ,^
  6. swool tcp mysql_swoole/mysql(异步)
  7. datagrip jdbc驱动_datagrip离线安装驱动jar
  8. JavaScript 开发工具webstrom使用指南
  9. mysql byte函数_mysql8 参考手册-format_bytes()函数
  10. vuex中actions配合mutation处理axios请求
  11. python解析多层json数据_python解析多层json操作示例
  12. 转:改变你思维模式书
  13. 在哪下拼多多上传助手?拼多多软件方法介绍
  14. 建议收藏5款办公必备电脑软件
  15. Python Data Analysis and Appplication
  16. 洛谷P2585[ZJOI2006]三色二叉树(树形DP)
  17. Error Calling Method of a PBNI object 的问题现象及解决方案
  18. 单光子发射CsPbX3 单颗粒钛矿胶体量子点/配体C8/C18-CsPbI3钙钛矿量子点
  19. 拉青电站调速器用比例阀实验出现问题
  20. 关于SNS社区与行业电子商务结合一些看法

热门文章

  1. linux 文件夹 775,linux - 如何为文件夹及其所有子文件夹和文件设置chmod?
  2. 1044 Shopping in Mars(二分法)
  3. 【TypeScript】带类型语法的JavaScript
  4. 黑苹果安装教程OC引导
  5. 【无标题】UE4连接vr外部设备
  6. 2008 r2 server sql 中文版补丁_Microsoft SQL Server 2008 R2 SP1补丁 64位 官方免费版(附安装教程)...
  7. 均匀分布(Uniform distribution)
  8. Python 阿拉伯数字转换为中文大写数字
  9. python制作雷达图_如何利用Python matplotlib绘制雷达图
  10. 远程桌面对方计算机无法远程,win7开启QQ远程协助无法连接对方电脑如何解决