ZOJ 2319 Beautiful People
2024-09-04 12:17:16
LIS。先按S降序升序再按B降序排序(如果B不按降序排序的话就会覆盖掉正解),然后再对B用O(nlog(n))的LIS求解就可以了。用d数组标记每个元素在上升序列中的位置,然后根据d倒着找id就可以了。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<fstream>
#include<sstream>
#include<cstdlib>
#include<vector>
#include<string>
#include<cstdio>
#include<bitset>
#include<queue>
#include<stack>
#include<cmath>
#include<map>
#include<set>
#define FF(i, a, b) for(int i=a; i<b; i++)
#define FD(i, a, b) for(int i=a; i>=b; i--)
#define REP(i, n) for(int i=0; i<n; i++)
#define CLR(a, b) memset(a, b, sizeof(a))
#define debug puts("**debug**")
#define LL long long
#define PB push_back
#define MP make_pair
using namespace std; const int N = 100100;
const int INF = 1e9 + 7; struct Node
{
int s, b, id;
bool operator < (const Node &rhs) const
{
return s < rhs.s || (s == rhs.s && b > rhs.b);
}
}p[N];
int g[N];
int d[N]; int main()
{
int s, b, t, n, ans;
scanf("%d", &t);
while(t --)
{
scanf("%d", &n);
for(int i = 0; i < n; i ++)
{
scanf("%d%d", &s, &b);
p[i].s = s, p[i].b = b, p[i].id = i + 1;
}
sort(p, p + n);ans = 0;
for(int i = 1; i <= n; i ++) g[i] = INF;
for(int i = 0; i < n; i ++)
{
int k = lower_bound(g+1, g+n+1, p[i].b) - g;
g[k] = p[i].b;
d[i] = k;
ans = max(ans, k);
}
printf("%d\n", ans);
int pt = -1;
for(int i = n - 1; i >= 0; i --)
{
if(p[i].s != pt && d[i] == ans)
{
printf("%d", p[i].id);
if(ans) putchar(' ');
ans --;pt = p[i].s;
}
if(!ans) break;
}puts("");
if(t) puts("");
}
}
最新文章
- 微软Face API体验——人脸检测
- 报表开发工具中开放的部分图表js接口列表
- DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
- linux源码Makefile详解(完整)【转】
- C++STL之map的基本操作
- Linux进程IPC
- Two ways to create file using &#39;doc&#39;.
- 【转】(DT系列六)devicetree中数据和 struct device有什么关系
- xampp进程和非进程执行
- poj 1458 Common Subsequence_最长公共子串
- python-igraph on windows10 64bit
- 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
- BlueMix - IBM的Paas云计算平台
- gitbash使用git 命令的准备工作
- Pandas合并数据集之concat、combine_first方法
- [转]Python机器学习工具箱
- c# 除掉前三个字符,剩下的4个字符全为数字方为特殊车辆
- 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能
- 2. select下拉框获取选中的值
- winform 验证用户正确后打开新窗口时关闭登陆窗口