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("");
}
}

最新文章

  1. 微软Face API体验——人脸检测
  2. 报表开发工具中开放的部分图表js接口列表
  3. DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
  4. linux源码Makefile详解(完整)【转】
  5. C++STL之map的基本操作
  6. Linux进程IPC
  7. Two ways to create file using &#39;doc&#39;.
  8. 【转】(DT系列六)devicetree中数据和 struct device有什么关系
  9. xampp进程和非进程执行
  10. poj 1458 Common Subsequence_最长公共子串
  11. python-igraph on windows10 64bit
  12. 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
  13. BlueMix - IBM的Paas云计算平台
  14. gitbash使用git 命令的准备工作
  15. Pandas合并数据集之concat、combine_first方法
  16. [转]Python机器学习工具箱
  17. c# 除掉前三个字符,剩下的4个字符全为数字方为特殊车辆
  18. 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能
  19. 2. select下拉框获取选中的值
  20. winform 验证用户正确后打开新窗口时关闭登陆窗口

热门文章

  1. UVA 11945 Financial Management 水题
  2. JVM监控启动参数
  3. Git_配置别名
  4. NBT(NetBIOS Over TCP)名称解析概述
  5. HDU 4720 Naive and Silly Muggles (简单计算几何)
  6. Unity3d Http Get请求
  7. jsp下Kindeditor环境搭建
  8. StringUtils类常用方法介绍
  9. 高效率Oracle SQL语句
  10. JavaScript 触发click事件 兼容FireFox,IE 和 Chrome