题目大意:
  给你一个序列,对序列中所有逆序对之间连一条边,问图中最大独立集为多大,有哪些点一定在最大独立集中。

思路:
  在纸上画一下发现最大独立集一定是元序列的一个LIS,最大独立集必经点就是所有LIS的公共部分。
  考虑把所有的LIS记录下来,然后构建一个DAG,DAG的割点即为LIS的公共部分。
  由于我们需要先知道所有的LIS的具体方案,只能写O(n^2)的DP记录转移,能拿60分。
  不过事实上我们也不需要知道具体的状态。
  我们可以记录一下所有LIS中的每个点在LIS上的哪个位置,看一下这个位置是否只有它一个点的。
  如果不,那么肯定可以被别的点替代。
  如果是,那么它肯定是LIS的公共部分。
  LIS可以O(n log n)求,最后判断是O(n)的,总的时间复杂度是O(n log n)。

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
int w[N],id[N],f[N],g[N],h[N];
int n;
class FenwickTree {
private:
int val[N];
int lowbit(const int &x) const {
return x&-x;
}
public:
void reset() {
memset(val,,sizeof val);
}
void modify(int p,const int &x) {
while(p<=n) {
val[p]=std::max(val[p],x);
p+=lowbit(p);
}
}
int query(int p) const {
int ret=;
while(p) {
ret=std::max(ret,val[p]);
p-=lowbit(p);
}
return ret;
}
};
FenwickTree t;
int main() {
n=getint();
for(register int i=;i<=n;i++) {
const int v=getint();
w[i]=v;
id[v]=i;
}
for(register int i=;i<=n;i++) {
f[w[i]]=t.query(w[i])+;
t.modify(w[i],f[w[i]]);
}
t.reset();
for(register int i=n;i;i--) {
g[w[i]]=t.query(n-w[i]+)+;
t.modify(n-w[i]+,g[w[i]]);
}
int ans=;
for(register int i=;i<=n;i++) {
ans=std::max(ans,f[w[i]]+g[w[i]]-);
}
printf("%d\n",ans);
for(register int i=;i<=n;i++) {
if(f[w[i]]+g[w[i]]-==ans) {
if(!~h[f[w[i]]]) continue;
if(!h[f[w[i]]]) {
h[f[w[i]]]=;
} else {
h[f[w[i]]]=-;
}
}
}
for(register int i=;i<=n;i++) {
if(f[w[i]]+g[w[i]]-==ans&&h[f[w[i]]]==) {
printf("%d ",i);
}
}
return ;
}

最新文章

  1. 一句jQuery代码返回顶部
  2. import()函数
  3. Media Player(APP)
  4. word检视意见导出(VBA)
  5. 以Akka为示例,介绍Actor模型
  6. POJ1275Cashier Employment(查分约束系统)
  7. jquery select操作和联动操作
  8. tpl demo
  9. 将项目同时托管到Github和Git@OSC
  10. 关于ZendStudio 10.5的破解 包括mac
  11. js功能代码大全
  12. css盒子模型和定位
  13. eclipse-修改启动JDK版本
  14. Auth组件,Forms组件
  15. R语言矩阵栅格显示矩阵颜色显示
  16. 【转】R语言 RStudio快捷键
  17. VirtualBox-5.0.16设置windows与ubuntu的共享文件夹
  18. SVN和IntelliJ IDEA忽略node_module设置
  19. linux,centOS,用LNMP搭建wordpress,更新固定连接--全流程
  20. iPhone手机屏幕的尺寸180330更新

热门文章

  1. 完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器
  2. 以下suse11.3x64可以安装pycrypto-2.6.1
  3. Linux 入门记录:四、Linux 系统常用命令
  4. Every Tom,Dick and Harry. 不管张三李四。
  5. centos创建子用户
  6. debian下没有公钥解决办法
  7. CMDB (后台管理) CURD 插件
  8. Centos7 环境准备
  9. Linux安全之密钥登录
  10. Django2.x版本在生成数据库表初始化文件报错