HIHO Coder - 1299 打折机票

描述

因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包。经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共
n 张机票。现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票。

输入

输入数据的第一行包含两个整数 n,?m(1?≤?n,?m?≤?105),分别表示机票的总数,和询问的总数。接下来的
n 行,每行两个整数 t,?v (1?≤?t,?v?≤?105),表示每张机票出发的时间和价格。 接下来的
m 行,每行两个整数 a,?b (1?≤?a?≤?b?≤?105),表示每个询问所要求的时间区间。

输出

对于每组询问,输出一行表示最贵的价格。如果没有符合要求的机票,输出一行"None"。

样例输入
7 6
1 1
2 1
4 3
4 4
4 5
6 9
7 9
1 7
1 2
6 7
3 3
4 4
5 5
样例输出
9
1
9
None
5
None

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

PS.真的很想吐槽那个图=日=

这是一个静态的线段树问题。

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int maxn = 1e6+7;
int a[maxn];
struct node
{
    int l, r, x;
}tickt[maxn*4];

void BuildTree(int x, int left, int right)
{
    tickt[x].l = left;
    tickt[x].r = right;
    if (left == right)
    {
        tickt[x].x = a[left];
        return;
    }
    int mid = (left+right) >> 1;
    BuildTree(x<<1, left, mid);
    BuildTree(x<<1|1, mid+1, right);
    tickt[x].x = max(tickt[x<<1].x, tickt[x<<1|1].x);
}
int query(int x, int left, int right)
{
    if(left <= tickt[x].l && tickt[x].r <= right)
        return tickt[x].x;
    int ans = 0;
    int mid = (tickt[x].l + tickt[x].r) >> 1;
    if (mid >= left) ans = max(ans, query(x<<1, left, right));
    if (mid < right) ans = max(ans, query(x<<1|1, left, right));
    return ans;
}
int main()
{
    int m, n;
    scanf("%d %d", &n, &m);

    memset(a, 0, sizeof(a));
    for(int i = 1; i <= n; i++)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        a[x] = max(a[x], y);
    }
    BuildTree(1, 1, 100000);
    for(int i = 1; i <= m; i++)
    {
        int from, to;
        scanf("%d %d", &from, &to);
        int p = query(1, from, to);
        if(p == 0)
            printf("None\n");
        else
            printf("%d\n", p);
    }
    return 0;
}
时间: 2024-10-24 22:17:33

HIHO Coder - 1299 打折机票的相关文章

线段树之应用 ---- #1299 : 打折机票

#1299 : 打折机票 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包.经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票.现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票. 输入 输入数据的第一行包含两个整数 n,?m(1?≤?n,?m?≤?105),分别表示机票的总数,和询问的总数.接下来的 n 行,

hihocoder 1299 打折机票 线段树

题目链接:http://hihocoder.com/problemset/problem/1299 code: //线段树 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define maxn 100005 using namespace std; int price[maxn]; int Max[maxn]; int segTree[4*maxn

hihocode #1299 打折机票

题意很简单就是给你两个数n和m,n表示有n张飞机票,m表示有m次查询,接下来n行,每行两个数,分别表示航班出发的时间和价格,接下来m行,每行两个数表示查询这两个数时间内航班最贵的价格.如果没有要求的机票就输出"None".这道题是一道典型的RMQ问题,就是区间最值查询问题.这里提供两种解法. 1.线段树可以解决,而且是一道线段树的裸题. //segment tree #include <iostream> #include <cstdio> #include &

题目1 : 打折机票(hihoCoder挑战赛20)

题目1 : 打折机票 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包.经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票.现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票. 输入 输入数据的第一行包含两个整数 n,?m(1?≤?n,?m?≤?105),分别表示机票的总数,和询问的总数.接下来的 n 行,每行

[HIHO1299]打折机票(线段树)

题目链接:http://hihocoder.com/problemset/problem/1299 线段树,按照t为下标去更新v,更新的时候要保留最大的那个. 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include

题目1 : 打折机票(hihocoder 20挑战赛)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包.经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票.现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的,最贵的机票. 输入 输入数据的第一行包含两个整数 n,?m(1?≤?n,?m?≤?105),分别表示机票的总数,和询问的总数.接下来的 n 行,每行两个整数 t,?v (

Hiho coder 1236 2015 北京网络赛 Score

五维偏序..一开始被吓到了,后来知道了一种BITSET分块的方法,感觉非常不错. 呆马: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 #include <vector> 7 #include <bitset> 8 #define inf 100000000

留美学生最便宜机票大全 [转+整理+总结]

1.传统方法-搜! 所熟知的美国订票三大门户网站: Orbitz, Travelocity & Expedia,以及美国订票超级aggregator: Kayak, Mobissimo, SideStep, FareChase. 然后这不是重点.... Booking Buddy 强大的搜索小帮手,只用输入一次搜索信息,就能点击以下许多网站进行搜索,包含了kayak, AirTran, US Airway, Expedia, Orbitz, CheapAir, TripAdvisor, Trav

hihoCoder #1320 : 压缩字符串 区间dp

/** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示. 例如AAAAAAAAAABABABCCD可以用10(A)2(BA)B2(C)D表示. 此外,这种压缩方法是可以嵌套的,例如HIHOHIHOCODERHIHOHIHOCODER可以表示成2(2(HIH