【Java/总结/牛客/ACM赛制】福建农林大学校赛(同步赛)

知识一览

单点查询区间值
c++/结构体排序

题目链接

E-派蒙的风花,从下面看?还是从侧面看?

又到了花开的季节,每到这时都会有人出来赏花。每朵花都有花期从stari 到endi(都包含),过了花期后花就会凋零。同时每个人都会选择一个时间点timei去赏花。你需要做的是返回所有人能看到多少朵花。

输入描述:
第一行输入两个正整数n(1≤n≤2∗10^5) 和 m(1≤m≤2∗10^5)分别表示花的数目和有多少人来赏花。
接下来n行,每行有两个整数,表示第i朵花的的花期starti和endi其中1 <=starti<=endi<=10^9。
接下来1行,m个整数,第i个数表示第i个人选择赏花的时间timei(1<=timei<=10^9)。
输出描述:
共1行m个整数,其中第i个数表示第i人能看到的花的数目。
示例1
输入
4 4
1 6
3 7
9 12
4 13
2 3 7 11
输出
1 2 2 2

Java TLE ;C++ AC

#include<bits/stdc++.h>
#define IOS  ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int N=6e5+10;

struct Node{
	int a,w;
}node[N];

bool cmp(Node a,Node b){
	if(a.a!=b.a)return a.a<b.a;
	else return b.w<a.w;
}

int main(){
    IOS
    int n,m;
    cin>>n>>m;
    int aa[m];
    map<int,int> mp;
    int cnt=-1;
    while(n-->0){
        int a,b;cin>>a>>b;
        node[++cnt].a=a;node[cnt].w=1;
        node[++cnt].a=b;node[cnt].w=-1;
    }
    for(int i=0;i<m;i++){
        cin>>aa[i];
        node[++cnt].a=aa[i];node[cnt].w=0;
    }
    sort(node,node+cnt+1,cmp);
    int ans=0;
    for(int i=0;i<=cnt;i++){
        if(node[i].w!=0)ans+=node[i].w;
        else mp[node[i].a]=ans;
    }
    for(int i=0;i<m;i++) cout<<mp[aa[i]]<<" ";
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值