sgu 199 beautiful people(nlog 的LIS并输出路径)
2015-07-20 16:28
567 查看
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <queue> #include <set> #include <algorithm> using namespace std; const int MAXN = 100000 + 10; struct Node { int a, b; int id; bool operator < (const Node& rhs)const { if(a != rhs.a) return a < rhs.a; else return b > rhs.b; } }A[MAXN]; int stack[MAXN]; int lis[MAXN]; int f[MAXN]; int N; int main() { int T; scanf("%d", &T); while(T--) { scanf("%d", &N); for(int i=1;i<=N;i++) { scanf("%d%d", &A[i].a, &A[i].b); A[i].id = i; } sort(A + 1, A + 1 + N); int top = 1; stack[1] = A[1].b; f[1] = 1; for(int i=2;i<=N;i++) { if(A[i].b > stack[top]) { stack[++top] = A[i].b; f[i] = top; } else { int pos = lower_bound(stack, stack + top, A[i].b) - stack; stack[pos] = A[i].b; f[i] = pos; } } cout << top << endl; int t = top; for(int i=N;i>=1;i--) { if(f[i] == t) { lis[--t] = A[i].id; } if(t < 0) break; } for(int i=0;i<top;i++) printf("%d ", lis[i]); cout << endl; } return 0; }
相关文章推荐
- CopyOnWriteArrayList详解
- linux下面关于makefile使用的笔记。
- bash shell脚本常用功能
- Linux上 使用zip命令打包 目录(递归)
- Copy from common to common
- apache启动时80端口占用的解决方法
- Centos 中如何快速定制二进制的内核 RPM 包
- cgroup测试存储设备IOPS分配
- linux rtp 编程JRTLIB
- Linux 简介
- bash shell学习之变量
- Linux下java使用Sigar的配置
- Linux real-time signal (实时信号)
- hive系统架构
- kali linux之窥看女神上网隐私(ettercap+wireshark+zenmap +dsniff)
- kali linux之窥看女神上网隐私(ettercap+wireshark+zenmap +dsniff)
- system/WIFEXITED/WEXITSTATUS函数-linux
- [Linux].vimrc配置
- linux svn cmd
- [转] Centos 6.4 python 2.6 升级到 2.7