【LIS】【递推】Gym - 101246H - ``North-East''
x坐标排序,y坐标当权值,同一个x坐标的,y从大到小排。
求f(i)表示以i结尾的LIS以后,从后向前枚举,不断更新一个max数组,max(i)代表最长上升子序列为i时,当前的 结尾的最大值是多少。
一个元素可能在LIS里面,则说明存在一个j>i,f(j)=f(i)+1,且a(j)>a(i),就查询一下max(f(i)+1)是否大于a(i)即可。如果可行的话,再用该值更新max数组。
一定在LIS里面的就是i可能在LIS里面,并且f(i)只出现了一次的。
队友的代码(↓)
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lowbit(x) ((x)&-(x))
using namespace std;
struct node{
int x,y,id;
}a[100005];
bool cmp(node a,node b)
{
return a.x==b.x?a.y>b.y:a.x<b.x;
}
int Ans1[100005],Ans2[100005],f[100005],g[100005],vis[100005],n,ans1num,ans2num,s[100005],ans,ls[100005];
bool cmp2(int a,int b)
{
return f[a]<f[b];
}
bool ans1[100005];
void add(int p,int x)
{
p=lower_bound(ls+1,ls+n+1,p)-ls;
for(;p<=n;p+=lowbit(p))
{
s[p]=max(s[p],x);
}
}
int get(int p)
{
p=lower_bound(ls+1,ls+n+1,p)-ls-1;
int nowans=0;
for(;p;p-=lowbit(p))
{
nowans=max(nowans,s[p]);
}
return nowans;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].id=i;
ls[i]=a[i].y;
}
sort(ls+1,ls+n+1);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i)
{
f[i]=get(a[i].y)+1;
add(a[i].y,f[i]);
ans=max(ans,f[i]);
}
for(int i=n;i;--i)
{
if(f[i]==ans||(vis[f[i]+1]&&a[i].y<g[f[i]+1]))
{
ans1[i]=1;
if(vis[f[i]]==0)
{
g[f[i]]=a[i].y;
vis[f[i]]=1;
}
else
{
g[f[i]]=max(g[f[i]],a[i].y);
}
}
}
for(int i=1;i<=n;++i)
if(ans1[i])
{
Ans1[++ans1num]=i;
}
sort(Ans1+1,Ans1+ans1num,cmp2);
for(int i=1;i<=ans1num;++i)
{
if(f[Ans1[i]]!=f[Ans1[i-1]]&&f[Ans1[i]]!=f[Ans1[i+1]])
{
Ans2[++ans2num]=a[Ans1[i]].id;
}
}
for(int i=1;i<=ans1num;++i)
Ans1[i]=a[Ans1[i]].id;
sort(Ans1+1,Ans1+ans1num+1);
sort(Ans2+1,Ans2+ans2num+1); printf("%d ",ans1num);
for(int i=1;i<ans1num;++i)
printf("%d ",Ans1[i]);
if(ans1num) printf("%d\n",Ans1[ans1num]);
printf("%d ",ans2num);
for(int i=1;i<ans2num;++i)
printf("%d ",Ans2[i]);
if(ans2num)printf("%d\n",Ans2[ans2num]);
return 0;
}
【LIS】【递推】Gym - 101246H - ``North-East''的更多相关文章
- 【递推】【概率】Gym - 100814A - Arcade Game
题意:给你一个不超过九位的不含重复数码的十进制数,每次会随机将它的数码打乱,变成一个新的数,如果它小于等于上一次的数,那么你输了:如果它大于上一次的数,那么可以继续.直到它变成能够表达的最大数为止就赢 ...
- 【递推】【DFS】【枚举】Gym - 101246C - Explode 'Em All
网格里放了一些石块,一个炸弹能炸开其所在的行和列.问炸光石块至少要几个炸弹. 枚举不炸开的行数,则可以得出还要炸开几列. 为了不让复杂度爆炸,需要两个优化. 先是递推预处理出f(i)表示i的二进制位中 ...
- Gym - 101196G :That's One Hanoi-ed Teacher (递推)
题意:给定当前汉诺塔的状态,问还有多少步走完,不合法输出“No”. 思路:显然可以一层一层试探下去的.我们设三个柱子为“起始”,“中转”,“终点”,当前状态的最大的盘子不可能在中转站处:如果在起始站, ...
- CF Gym 100187D Holidays (数学,递推)
题意:给n个元素,从n中选两个非空集合A和B.问有多少中选法? 递推: dp[n]表示元素个数为n的方案数,对于新来的一个元素,要么加入集合,要么不加入集合自成一个集合.加入集合有三种选择,A,B,E ...
- codeforces Gym 100338H High Speed Trains (递推,高精度)
递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案, 每次选出一个孤立点,那么对应方案数就是上次的答案. 枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1. 要用到高精度 ...
- 最长上升子序列(动态规划递推,LIS)
1759:最长上升子序列 题目: 总时间限制: 2000ms 内存限制: 65536kB 描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 四角递推(CF Working out,动态规划递推)
题目:假如有A,B两个人,在一个m*n的矩阵,然后A在(1,1),B在(m,1),A要走到(m,n),B要走到(1,n),两人走的过程中可以捡起格子上的数字,而且两人速度不一样,可以同时到一个点(哪怕 ...
- Codeforces Gym101205D:Fibonacci Words(KMP+递推)
Gym 101205D 题意:f[0] = "0", f[1] = "1",接下来f[i] = f[i-1] + f[i-2],相当于字符串拼接.然后给出一个n ...
- Code Force 429B Working out【递推dp】
Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...
随机推荐
- TensorFlow非线性拟合
1.心得: 在使用TensorFlow做非线性拟合的时候注意的一点就是输出层不能使用激活函数,这样就会把整个区间映射到激活函数的值域范围内无法收敛. # coding:utf-8 import ten ...
- MSSQL数据库 "无法删除数据库 "***",因为该数据库当前正在使用" 解决方案
--1 创建数据库 create database AAA --2 使用数据库 use AAA --3 在AAA数据库下创建table create table BBB ( bId ,) primar ...
- 常见网络命令之Ping命令
前言:计算机网络老师要求我们自己总结一下常见的网络命,然后上课可以上去讲一下这些命令使用,像我这么听话的好学生,肯定是照老师要求,认真的总结了一下,总结的过程中,我发现网上已经有的资源讲的都不是很详细 ...
- 【转】MP3文件原理及结构解析
1.引言文件压缩技术的日新月异使得MP3成为时下最烫手的音乐格式,优质的音乐随着0与1的排列迅速散布 到世界各地,撼动人心.何谓MP3?MP3的全称是MPEG Audio Layer 3,它是一种高效 ...
- static class 和 non static class 的区别
static class non static class 1.用static修饰的是内部类,此时这个 内部类变为静态内部类:对测试有用: 2.内部静态类不需要有指向外部类的引用: 3.静态类只能访问 ...
- 【设计模式】原型模式(Prototype)
摘要: 1.本文将详细介绍原型模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入原型模式 2. 原型模式的概念及优缺点介绍 3. 原型模式对拷贝的使用 4. 原型模式在A ...
- #error This file was generated by a newer version of protoc
pattern@pattern89:/raid0/workspace/houjun/caffe-ssd$ sudo make all -j8PROTOC src/caffe/proto/caffe.p ...
- 微信小程序滚动条返回顶部
scroll-view(可滚动视图区域): 使用竖向滚动时,需要给<scroll-view/>一个固定高度,通过 WXSS 设置 height,将scroll-y属性设置为true,将en ...
- 【Mac电脑】Jenkins的安装
1.JDK自己下载安装喽, 2.下载Jenkins 下载路径:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenki ...
- OpenStack 认证服务 KeyStone 服务注册(六)
一)检查keystone是否安装配置成功 1.1删除环境变量的配置 unset OS_AUTH_URL redhat 1.2 请求令牌认证 admin用户,请求认证令牌 openstack --os- ...