CodeForces Manthan 2011 D. Optical Experiment(动态规划)
题目大意
这题建议大家先看看原题是怎么描述的,在看看我讲的中文题面,本来我打算直接翻译的,但是考虑到文字太多,还是算了
原题链接:D. Optical Experiment
我描述的中文题意:
题意化简之后就是一个矩形,上下两边各有 n(1≤n≤106) 个点,每个上边的点只会和下边的一个点相连,构成一条线段,那么就有了 n 条线段,现在问:这 n 条线段中,最多有多少线段,他们两两相交?输出这个最大的线段数量
做法分析
把矩形上边的点依次重新编号(从小到大),下边对应线段的点编上相同的号
假设 m 条线段两两相交,那么这 m 条线段在上边的编号必然是递增的,在下边的编号必然是递减的
那么问题转化成了在下边求一个最长下降的子序列,必须用 nlogn 的做法
PS:这题的关键是题意的转化以及对线段的重新编号,好题!出题人隐藏的太深!
参考代码
1 #include <cstring> 2 #include <cstdio> 3 #include <iostream> 4 #include <map> 5 6 using namespace std; 7 8 const int N=1000006; 9 10 map <int, int> ihash; 11 int n, s[N], t[N], f[N], len[N], ans; 12 13 int main() 14 { 15 scanf("%d", &n); 16 for(int i=0; i<n; i++) 17 { 18 scanf("%d", &s[i]); 19 ihash.insert(make_pair(s[i], i+1)); 20 } 21 int ans=0; 22 for(int i=0; i<n; i++) 23 { 24 scanf("%d", &t[i]); 25 t[i]=ihash[t[i]]; 26 } 27 memset(f, 0, sizeof f); 28 f[0]=1, len[1]=t[0], ans=1; 29 for(int i=1; i<n; i++) 30 { 31 int Min=len[f[i-1]]; 32 if(t[i]<Min) len[++ans]=t[i], f[i]=f[i-1]+1; 33 else 34 { 35 int L=1, R=ans; 36 while(L<R) 37 { 38 int mid=(L+R)>>1; 39 if(len[mid]<t[i]) R=mid; 40 else L=mid+1; 41 } 42 if(len[L]<t[i]) L--; 43 L++; 44 len[L]=t[i]; 45 f[i]=f[i-1]; 46 } 47 } 48 printf("%d\n", ans); 49 return 0; 50 }
题目链接 & AC通道
CodeForces Manthan 2011 D. Optical Experiment
转载于:https://www.cnblogs.com/zhj5chengfeng/archive/2013/05/10/3072203.html
CodeForces Manthan 2011 D. Optical Experiment(动态规划)相关推荐
- Codeforces Beta Round #10 D. LCIS 动态规划
D. LCIS 题目连接: http://www.codeforces.com/contest/10/problem/D Description This problem differs from o ...
- Codeforces 979E Kuro and Topological Parity - 动态规划 - 组合数学
题目传送门 传送点 题目大意 给定$n$个标号依次为$1, 2, \cdots, n$的点,其中一些点被染成一些颜色,剩下的点没有染色.你需要添加一些有向边并将剩下的点染色,满足有向边从编号小的一端指 ...
- codeforces 1197D. Yet Another Subarray Problem 动态规划
题意 :给你n个数,还有m和k,让你找一个区间使这个公式的值最大 其中⌈x⌉是对x向上取整,l和r是所选的区间的左右下标. 思路 :定义一个dp[i][j],表示第i个数作为右端点,区间长度对m取 ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求出贡献最大的三元对:(i,j,k)(i,j,k)(i,j,k),满足 i<j<ki<j<ki<j<k ...
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp预处理超集
传送门 文章目录 题意: 思路: 题意: n≤1e6,ai≤2e6n\le1e6,a_i\le2e6n≤1e6,ai≤2e6 思路: 由于(aj&ak)(a_j \And a_k)(aj& ...
- 图像处理与计算机视觉资源汇总——论文+代码+教材+视频等等
历时一个多月,终于用业余时间把这些资料整理出来了,总算了却了一块心病,也不至于再看着一堆资料发愁了.以后可能会有些小修小补,但不会有太大的变化了.万里长征走完了第一步,剩下的就是理解和消化了.借新浪i ...
- 计算机视觉与模式识别方面的代码code
UIUC的Jia-Bin Huang同学收集了很多计算机视觉方面的代码,链接如下: https://netfiles.uiuc.edu/jbhuang1/www/resources/vision/in ...
- latex自动生成中文目录_texpad: 中文输出+自动参考文献生成(bib+bst)
写在前面:本文仅记录自己在家无聊,接触了下LaTeX. 本文是在MAC下使用Texpad+MacTeX,进行LaTeX编辑, a.输出中文问题,此问题参考自:texpad中如何使用中文?(mac OS ...
最新文章
- HTML5 跨文档消息传输
- Oracle数据库迁移后变慢,迁移数据之后,读取数据库变得很慢
- Trie Tree 实现中文分词器
- 选中的磁盘具有mbr分区表。在efi_如何使用老毛桃winpe的Bootice工具备份VHDX文件MBR分区表?...
- (原) Data Blocks, Extents, and Segments
- iOS学习笔记15-设计模式之 适配器模式
- mysql常用的yu语句_mysql常用sql语句
- 懒人神器——新手必备的图片后期处理软件
- 数学分析(卓里奇)学习笔记001
- 测试计划工作的目的是什么?
- Google Java Style Guide
- html作品使用说明,使用说明html模板
- 资讯类App主流框架(一)
- AOP术语、SpringAOP
- 我国超级计算机历代,《决战崛起——中国超算强国之路》作品研讨会召开
- 一篇文章让你从JAVA零基础入门`OOP`编程12.19
- Java内存马攻防实战——攻击基础篇
- js实现简单好玩儿的放大镜个人讲解
- C#迭代器的详细用法
- 2022年安全员-B证试题及模拟考试
热门文章
- [论文阅读][ICP变种] Generalized-ICP
- leetcode—— 401. 二进制手表(使用到将数字转换为字符)
- 你在 或者不在 需要逻辑回归来算 | 协和八
- 06-用两个栈实现队列
- python发动机曲轴连杆动力学计算
- 安卓系统双屏异显_Android实现双屏异显
- anaconda创建新环境_【创建社会主义新农村】怀城街道:转变整治理念 农村人居环境换新颜...
- bh1750采集流程图_基于MSP430和CC2530的温室大棚数据采集系统设计
- mysql utf 8bm4 没用_不要在 MySQL 中使用“utf8”,請使用“utf8mb4”
- java 检测表情符号_java – 检测String中的字符是否是表情符号(使用Android)