BOJ 394

原创 2012年03月24日 19:10:15

Problem I. The Longest Sequence of
Rectangles
Description
A rectangle is specified by a pair of coordinates (x1 , y1) and (x2 , y2)
indicating its lower-left and upper-right corners (x1 <= x2 and y1 <= y2). For
a pair of rectangles, A = ((X_A1, Y_A1), (X_A2, Y_A2)) and B = ((X_B1, Y_B1),
(X_B2, Y_B2)), we define A <= B if X_A2<X_B1 and Y_A2<Y_B1. Given a
number of rectangles on the plane, you are asked to find the length L of the
longest sequence of rectangles (A1, A2, ..., AL) such that A1 <= A2 <= ...
<= AL.
Input
The input contains multiple test cases. The first line of the input is an integer
T, indicating the number of test cases. Each test case begins with a line
containing a single integer n (1 <= n <= 100000), indicating the number of
rectangles. Each of the next n lines contains four integers x1, y1, x2, y2 (-
1000000 <= x1 < x2 <= 1000000, -1000000 <= y1 < y2 <= 1000000),
indicating the lower left and upper right corners of a rectangle.
Output
For each input test case, output a single integer indicating the length of the
longest sequence.
Sample Input
2
3
1 5 2 8
3 -1 5 4
10 10 20 20
2
2 1 4 5
6 5 8 10
Sample Output
2
1

解题思路:(此题的原型就是上一篇日志nlogn最长上升子序列(LIS) )显然,最终的答案序列中矩形的左下角和右上角点坐标一定是按x严格递增的。这就给了我们将二维问题降至一维的思路。将每个矩形视为两个点(左下角和右上   角)的组合。将这2N 个点按照x坐标排序。这样可以将问题从二维空间降至一维空间:维护数组y[m] ,表示长度为m矩形序列的最后一个矩形y坐标最小是多少。依次遍历这排序后的2N 个点。若当前点为矩形的左下角,二分查找该点的y坐标在F数组中的位置。若当前点为矩形的右上角,则用其左下角的值更新F 数组。之所以不可以立即更新F 数组,是因为要求矩形序列中后一个矩形的左下角严格在前一个的右上方。

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;

const int MV=200010;

struct point{
    int x,y,flag,id;
    bool operator<(const point& t)const{
        if(x!=t.x)return x<t.x;
        return flag < t.flag;
    }
}p[MV];

int y[MV], pos[MV];

int main(){
    int n, T;
    scanf("%d", &T);
    while(T--){
    	scanf("%d", &n);
        if(n==0)break;
        for( int i=0;i<n;i++){
            scanf("%d%d",&p[2*i].x,&p[2*i].y);
            p[2*i].flag=0;

            scanf("%d%d",&p[2*i+1].x,&p[2*i+1].y);
            p[2*i+1].flag=1;

            p[2*i].id=p[2*i+1].id=i;
        }
        n*=2;
        sort(p,p+n);

        int cnt=0;

        for(int i=0;i<n;i++){
            if(p[i].flag == 0){
                    pos[p[i].id] = lower_bound(y+1, y+1+cnt, p[i].y) - y ;
            } else {
                int tp = pos[p[i].id];
                if(tp > cnt)y[++cnt] = p[i].y;
                else y[tp] = min(y[tp], p[i].y);
            }
        }

        printf("%d\n",cnt);
    }
    return 0;
}


 

BOJ 394(LIS应用)(nlogn算法)

题目链接:点击打开链接 题目虽然是给的二维坐标,但是根据题目down_left和upper_right是“绝对”的上升关系 所以这自然就变成了我们熟悉的LIS,由于数据量很大,所以我们只能用N(log...
  • u011613321
  • u011613321
  • 2014年03月10日 17:22
  • 490

LeetCode 394. Decode String 解题报告

LeetCode 394. Decode String 解题报告
  • camellhf
  • camellhf
  • 2016年10月27日 21:01
  • 475

【leetcode】394. Decode String

一、题目描述 Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_...
  • xiaoquantouer
  • xiaoquantouer
  • 2016年09月19日 16:07
  • 904

Leetcode 394. Decode String

public class Solution { public String decodeString(String s) { Stack intStack = new Stac...
  • u011094114
  • u011094114
  • 2017年01月20日 03:57
  • 90

LeetCode—394. Decode String

Decode String思路:逐个char解析即可 GitHub地址:https://github.com/corpsepiges/leetcode 点此进入如果可以...
  • corpsepiges
  • corpsepiges
  • 2016年09月06日 10:59
  • 525

VB程序运行时产生的错误号码的中文解释

VB程序运行时产生的错误号码的中文解释3没有返回的GoSub5无效的过程调用6溢出7内存不足9数组索引超出范围10此数组为固定的或暂时锁定11除以零13类型不符合14字符串空间不足16表达式太复杂17...
  • chenjl1031
  • chenjl1031
  • 2008年03月31日 13:43
  • 2608

spoj 394

每段可以连续的串的可能性是个Fibonacci数列   但是直接dp更好吧~~ #include #include using namespace std; char a[5010]; in...
  • u011517186
  • u011517186
  • 2013年08月09日 12:26
  • 467

codeforces #394

A题意:上台阶奇数和偶数分别多少可以实现是从a到b连着上的(a>=1)tip:0,0不可以,至少上了一节#include #include #include #include using na...
  • zjy2015302395
  • zjy2015302395
  • 2017年02月08日 10:31
  • 78

Leetcode 394. Decode String 字符串解码 解题报告

1 解题思想意思是在字符串当中,有一个特殊的格式 — k[S],遇到这种状况,需要把S重复k次,注意是可以嵌套的在这次解题当中,我是使用了栈的方式,去解决这个问题。分别使用了一个全局的已解码的字符串...
  • MebiuW
  • MebiuW
  • 2016年09月06日 12:19
  • 3677

LeetCode394 Decode String java solution

题目链接: https://leetcode.com/problems/decode-string/ 点击打开链接 题目要求: Given an encoded string, r...
  • sinat_32547403
  • sinat_32547403
  • 2016年12月26日 11:52
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BOJ 394
举报原因:
原因补充:

(最多只允许输入30个字)