• Laptop(线段树+离散化)


    链接:https://ac.nowcoder.com/acm/contest/16/A
    来源:牛客网

    题目描述

    FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。
    但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩。
    拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔记本的内存和速度是不可兼得的。
    可是,有一些笔记本是被另外一些“完虐”的,也就是内存和速度都不高于另外某一个笔记本,现在FST想统计一下有多少笔记本被“完虐”。

    输入描述:

    第一行一个正整数n,
    表示笔记本的数量。接下来n行,每行两个正整数M
    i
    ,S
    i
    表示这款笔记本的内存和速度。
    n≤10
    5
    ,M
    i
    ,S
    i
    ≤10
    9

    输出描述:

    一行,一个正整数,表示被完虐的笔记本数。
    示例1

    输入

    复制
    4
    100 700
    200 500
    50 100
    300 400

    输出

    复制
    1

    备注:

    M
    i
    和S
    i
    都是越大越优。
    数据保证M
    i
    互不相同,S
    i
    也互不相同。
    代码:
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    
    const int maxn=2e5+5;
    typedef long long ll;
    using namespace std;
    
    struct node
    {
        int l,r;
        int num;
    }tree[maxn<<2];
    struct node1
    {
        int a,b;
        bool friend operator <(node1 x,node1 y)
        {
            return x.a>y.a;
        }
    }p[maxn];
    vector<int>v;
    void build(int m,int l,int r)
    {
        tree[m].l=l;
        tree[m].r=r;
        tree[m].num=0;
        if(l==r)
        {
            return ;
        }
        int mid=(l+r)>>1;
        build(m<<1,l,mid);
        build(m<<1|1,mid+1,r);
    }
    void update(int m,int pos,int val)
    {
        if(tree[m].l==tree[m].r&&tree[m].l==pos)
        {
            tree[m].num=val;
            return ;
        }
        int mid=(tree[m].l+tree[m].r)>>1;
        if(pos<=mid)
        update(m<<1,pos,val);
        else
        {
            update(m<<1|1,pos,val);
        }
        tree[m].num=(tree[m<<1].num+tree[m<<1|1].num);
    }
    int query(int m,int l,int r)
    {
        if(tree[m].l==l&&tree[m].r==r)
        {
            return tree[m].num;
        }
        int mid=(tree[m].l+tree[m].r)>>1;
        if(r<=mid)
        {
            return query(m<<1,l,r);
        }
        else if(l>mid)
        {
            return query(m<<1|1,l,r);
        }
        else 
        {
            return query(m<<1,l,mid)+query(m<<1|1,mid+1,r);
        }
    } 
    int getid(int x)
    {
        return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
    }
    int main()
    {
        int n;
        cin>>n;
        for(int t=0;t<n;t++)
        {
            scanf("%d%d",&p[t].a,&p[t].b);
            v.push_back(p[t].a);
            v.push_back(p[t].b);
            //p[t].pos=t;
        }
        sort(v.begin(),v.end());
        v.erase(unique(v.begin(),v.end()),v.end());
        sort(p,p+n);
        build(1,1,2*n);
        ll ans=0;
        for(int t=1;t<n;t++)
        {
           update(1,getid(p[t-1].b),1);
        
           if(query(1,getid(p[t].b),2*n))
           {
    //           cout<<query(1,1,getid(p[t].b)-1)<<endl;
               ans++;
           }
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    5_4 编码重新总结
    5_9 ___2 mc函数
    5_9 代码分析 load_pic_pointers
    5_2 实现过程中
    5_4 calvc
    428 对于 mb_cmp_init函数中一些宏定义的展开 x264_encoder_open中
    Oracle数值处理函数
    JAVA常用注解
    Java随笔
    centos 7 上Hive2.1.1的安装与基本操作
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/11313950.html
Copyright © 2020-2023  润新知