Codeforces Round #388(Div. 2)D. Leaving Auction【二分+思维】好题~

Codeforces 749D Leaving Auction 二分+Set 点击打开链接 题意;一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去,问对于每一个询问减掉num个人后是谁赢了拍卖,最小的价格是多少。n,q 思路:set存每个人的最大bids和编号  && vector保存每个人投的bid,先T掉num个人后 利用set自动对最大bids排序后 如果当前set size()为1时 输出vector[x]的最小即可 如果 阅读详情
D. Leaving Auction
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

There are n people taking part in auction today. The rules of auction are classical. There weren bids made, though it's not guaranteed they were from different people. It might happen that some people made no bids at all.

Each bid is define by two integers (ai, bi), whereai is the index of the person, who made this bid andbi is its size. Bids are given in chronological order, meaningbi < bi + 1 for alli < n. Moreover, participant never makes two bids in a row (no one updates his own bid), i.e.ai ≠ ai + 1 for alli < n.

Now you are curious with the following question: who (and which bid) will win the auction if some participants were absent? Consider that if someone was absent, all his bids are just removed and no new bids are added.

Note, that if during this imaginary exclusion of some participants it happens that some of the remaining participants makes a bid twice (or more times) in a row, only first of these bids is counted. For better understanding take a look at the samples.

You have several questions in your mind, compute the answer for each of them.

Input

The first line of the input contains an integer n (1 ≤ n ≤ 200 000) — the number of participants and bids.

Each of the following n lines contains two integersai andbi (1 ≤ ai ≤ n, 1 ≤ bi ≤ 109, bi < bi + 1) — the number of participant who made the i-th bid and the size of this bid.

Next line contains an integer q (1 ≤ q ≤ 200 000) — the number of question you have in mind.

Each of next q lines contains an integerk (1 ≤ k ≤ n), followed byk integers lj (1 ≤ lj ≤ n) — the number of people who are not coming in this question and their indices. It is guarenteed that lj values are different for a single question.

It's guaranteed that the sum of k over all question won't exceed200 000.

Output

For each question print two integer — the index of the winner and the size of the winning bid. If there is no winner (there are no remaining bids at all), print two zeroes.

Examples
Input
6
1 10
2 100
3 1000
1 10000
2 100000
3 1000000
3
1 3
2 2 3
2 1 2
Output
2 100000
1 10
3 1000
Input
3
1 10
2 100
1 1000
2
2 1 2
2 2 3
Output
0 0
1 10
Note

Consider the first sample:

  • In the first question participant number 3 is absent so the sequence of bids looks as follows:
    1. 1 10
    2. 2 100
    3. 1 10 000
    4. 2 100 000
    Participant number 2 wins with the bid 100 000.
  • In the second question participants 2 and 3 are absent, so the sequence of bids looks:
    1. 1 10
    2. 1 10 000
    The winner is, of course, participant number 1 but the winning bid is10 instead of 10 000 as no one will ever increase his own bid (in this problem).
  • In the third question participants 1 and 2 are absent and the sequence is:
    1. 3 1 000
    2. 3 1 000 000
    The winner is participant 3 with the bid 1 000. 

题目大意(源自CF群):

有n<=200000个人参加拍卖一件商品,总共出价n次,但是并不保证一人出价一次,有可能有人没有机会出价。
每一次出价都是一个整数对(a[i],b[i])(a[i]<=n,b[i]<=1e9),a[i]表示出价的人的编号以及b[i]是出价的价格。保证b[i]<b[i+1]对i<n成立以及a[i]!=a[i+1]
有q<=2e5个询问
每一个询问包含一个整数k以及k个人的编号l[j],保证k的总和不会超过2e5
问如果这些人不出现的话,谁会获得这件商品?
对于每一个询问,输出两个整数,胜出者的编号以及胜出者出的价格,如果没有人胜出,输出两个0.


思路:


1、观察到关于询问K,删除的所有ID的和不超过200000这个条件我们可以推出,最极限的情况,我们也就有400+个ID.那么我们考虑进行暴力,对应输入进来的所有出价,我们维护每个人的最高出价(因为保证输入递增,那么我们只要维护最后一次输入进来的出价即可);然后我们将其按照从大到小排序,那么对应我们找到胜利者很容易,只要枚举出第一个没有被删除的人即可。那么此时操作时间复杂度约为O(400*q);


2、因为我们此时已经很容易的找到了胜利者,那么我们接下来需要判断这个胜利者的胜利价格,那么对应我们还需要找到第二大的出价人,对应找到他的最大出价,那么接下来我们只要找到胜利者的第一个大于这个最高出价的出价,那么这个价格就是胜利的者的胜利出价。,那么我们对应维护一个vector,其中存入每个人的出价,按照输入的顺序,因为题目保证每个出价都是递增的,那么其具有单调性,那么接下来我们二分这个价值即可。总时间复杂度越位O(400*q*logn);


3、实现代码细节比较多,注意没有胜者和只有一个出价人的情况的处理。


Ac代码:

#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{
    int val,num,pos;
}final[2006000];
vector<int >mp[250006];
int num[200600];
int val[200600];
int a[250006];
int vis[250006];
int n,cont,maxn,minn,nummaxn;
int cmp(node a,node b)
{
    return a.val<b.val;
}
void find()
{
    int ans=-1;
    int l=0;
    int r=mp[nummaxn].size()-1;
    while(r-l>=0)
    {
        int mid=(l+r)/2;
        if(mp[nummaxn][mid]>=minn)
        {
            ans=mp[nummaxn][mid];
            r=mid-1;
        }
        else l=mid+1;
    }
    printf("%d\n",ans);
}
void Slove()
{
    int cnt=0;
    nummaxn=-1;
    maxn=-1,minn=-1;
    for(int i=n;i>=1;i--)
    {
        if(vis[final[i].num]==1)continue;
        if(final[i].val==0)break;
        if(cnt==0)
        {
            maxn=final[i].val;
            cnt++;
            nummaxn=final[i].num;
        }
        else
        {
            if(nummaxn==final[i].num)continue;
            else
            {
                minn=final[i].val;
                cnt++;
            }
        }
        if(cnt==2)break;
    }
    if(nummaxn==-1)
    {
        printf("0 0\n");
        return ;
    }
    printf("%d ",nummaxn);
    find();
}
int main()
{
    while(~scanf("%d",&n))
    {
        cont=0;
        memset(final,0,sizeof(final));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)mp[i].clear();
        for(int i=1;i<=n;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            final[x].val=y;
            final[x].pos=i;
            final[x].num=x;
            num[i]=x;val[i]=y;
            mp[x].push_back(y);
        }
        sort(final+1,final+n+1,cmp);
        int q;
        scanf("%d",&q);
        while(q--)
        {
            int k;
            scanf("%d",&k);
            for(int i=1;i<=k;i++)
            {
                scanf("%d",&a[i]);
                vis[a[i]]=1;
            }
            Slove();
            for(int i=1;i<=k;i++)
            {
                vis[a[i]]=0;
            }
        }
    }
}










数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码) 数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.csdn.net/mtl1994 立即下载

相关推荐

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Codeforces Round #388 (Div. 2)D. Leaving Auction(二分+思维)

D. Leaving Auctiontime limit per test:2 secondsmemory limit per test:256 megabytesinput:standard inputoutput:standard outputThere are n people taking part in auction today. The rules of auction are cla

妍恐龙的博客....^~^眼熟我 539

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Codeforces Round #388 (Div. 2)D. Leaving Auction

题目链接:http://codeforces.com/contest/749/problem/D Codeforces Round #388 (Div. 2) DThere are n people taking part in auction today. The rules of auction are classical. There were n bids made, though it

now_ing的博客 227

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Matlab双目相机标定

1 概述 现在有许多双目相机在出厂时就已经标定好了,用户拿到手后可以直接使用,例如Intel Realsense系列。但是有些相机出厂的时候并没有完成标定工作,因而这个时候就需要我们自己来标定。由于笔者曾改装过一个双目相机,最远可以测至50m,因此有一定的心得体会想给大家分享一下。本文主要介绍双目相机标定的整个过程,以及导出标定数据的方法。 相机标定主要分为手动标定和自动标定,手动标定比较繁琐,这里主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。具体的相关标定细节也可以参照这篇博客:m

weixin_46133643的博客 2万+

Codeforces Round #388 (Div. 2)-D. Leaving Auction

原题链接 D. Leaving Auction time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There are n people taking part

L. 470

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6546

codeforce 749 D. Leaving Auction 拍卖 (set+二分) 思维题!!!

题目大意(源自CF群): 有n 每一次出价都是一个整数对(a[i],b[i])(a[i] 有q 每一个询问包含一个整数k以及k个人的编号l[j],保证k的总和不会超过2e5 问如果这些人不出现的话,谁会获得这件商品? 对于每一个询问,输出两个整数,胜出者的编号以及胜出者出的价格,如果没有人胜出,输出两个0. 思路:用set >pos维护竞价人的下标和最大值,把最大值作为p

AK_HuangYC的博客 531

5分钟快速搭建:使用ros1_bridge实现ROS2容器与ROS1主机的无缝通信

本文详细介绍了如何在5分钟内快速搭建基于ros1_bridge的通信方案,实现运行在Docker容器中的ROS2节点与宿主机ROS1系统的无缝数据交换。通过环境隔离、Docker容器化部署及选择性桥接配置,该方案能有效整合新旧系统,避免大规模代码重构,是机器人项目渐进式升级的实用策略。

weixin_29268637的博客 179

YOLOv11-seg 改进系列 | 引入原创 RSCD 重参数共享卷积分割头,增强 Head 表达力并压低计算量

本文提出一种改进的YOLOv11-seg分割头Segment_RSCD,通过重参数共享卷积增强表达能力。该模块在LSCD共享检测头基础上引入DiverseBranchBlock重参数卷积,保留三尺度预测与Proto掩码原型接口不变。相比原始Segment头,Segment_RSCD参数增加4%但计算量降低1.3%,在共享卷积结构中通过多分支补偿表达能力损失,同时利用Scale层保持尺度差异校准。该方法不改动Backbone/Neck结构,仅重构检测/分割头,实现训练期多路径聚合与部署期等效单分支的平衡。

qq_44224801的博客 184

Codeforces Round #388 (Div. 2)D. Leaving Auction(水题呀?)

题目链接:点击打开链接 思路: 我们只要把每个人竞价的最大值存起来, 并且把每个人的所有竞价维护在一个有序数组(方便二分), 对于一组询问,  我们从大到小遍历这k个数,把不在这k个数的最终竞价最大的两个人找到(复杂度O(K)), 然后在竞价最大的那个人的set里二分第二大的人的竞价最大值就行了。 细节参见代码: #include #include #include #include

AC_Arthur的专栏 1052

STM32(HAL库)驱动HC-SR04测距模块

本文介绍通过STM32F103C8T6单片机对HC-SR04测距模块进行驱动,并且通过串口对数据进行打印。

weixin_44597885的博客 2204

Codeforces Round #388 (Div. 2)D Leaving Auction

题目大意:        有很多人在竞价,有n次出价,由出价人编号和出价金额组成。现在有k次询问,问每次如果这些人不竞价,那么最后会是谁获胜,竞价金额是多少。输出保证了不会有同一个人两次出价,每次出价的金额也是严格递增的。 题目解法:       先用向量保存每个人的出价记录。然后将每个人最后一次的出家情况放入set,每次删除去掉的人,观察如果set为空,就输出0 0;如果只剩一个人,那就是

bigwatermlon的博客 3万+

详细推导波特图增益和相位曲线

最近因为项目需求,在回看波特图方面的内容。大三那会,《自动控制原理》这本书里面就讲过这些东西,但是那时候总感觉学这些没啥用,反正以后也用不到,对这种课程的重视度不是很高。 工作后发现,只要你从事的是和本专业相关的工作,大学学过的很多理论课程在后面大概率都会用到。曾经那些我们在学校以为用不上的东西,熟不知在后面用处还多着呢。所以啊,仅仅只是我们的以为而已! 现在还在学校的同学,对待《自动控制理论》、《信号与系统》、《通信原理》这样的核心专业课,建议还是好好学习一下,认真听听课。哪怕是考试完以后就会忘掉,但当我

D_Katter的博客 3936

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

Codeforces Round #388 (Div. 2) D. Leaving Auction

这道题主要是运用stl和二分,主要是set的运用可以练一下std。 先用vector存每个人的出价,再用一个数组和set存每个人的最高价,最后对于每一个q,把不在的人从set 里面erase掉,结束后再加进去。erase掉不在的人后,取出出价最高的两个人(set里面的最后两个人),找出价第二高的在最高的人的位置+1,就是出价最高的。

hi_just_do_it的博客 456

【教培管家】小程序实战(五):体验课预约——从流量到转化的闭环

本节我们通过变量状态管理和数据联动,实现了孩子选择和日期选定。下一篇我们继续讲解预约页面,根据选择的日期来筛选排课,供用户进行预约。

低代码布道师的博客 1562

Leaving Auction-一道就考set特性的题目

Codeforces Round #388 (Div. 2) D . Leaving Auction 题意很简单,就是卡时间,首先你要知道set的有序性,唯一性,查找搜索都是O(logN)的时间,由复杂度可以大概推算时间。 每个人的最大出价要数组maxprice 存起来,每个人的每一次出价用set存起来,以便找到最小价格 询问之前,先构造一个最大价格集合,set#include <

永远保持谦卑好学 466

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Codeforces Round #388 (Div. 2)D. Leaving Auction(set)

题意:有有许多人参加拍卖,问当假定某些人不参加的时候剩余的人当中谁是最终的赢家,输出他的编号和最终竞价,注:每个人都不能和自己竞价,即若某人连续竞价两次,以第一次价格为准。输入数据保证竞价递增。 思路: 我们只要把每个人竞价的最大值存起来, 并且把每个人的所有竞价维护在一个有序数组(方便二分), 对于一组询问,  我们从大到小遍历这k个数,把不在这k个数的最终竞价最大的两个人找到(复杂度O(K...

c_czl的博客 207

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CodeForces 670D Magic Powder - 2 (二分)

L - Magic Powder - 2 Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description The term of this problem is the same as the previous one,

Calm微笑 660

Leaving Auction

Leaving Auction 题目链接:http://codeforces.com/contest/749/problem/D 二分 本来以为是哪种神奇的数据结构,没想到sort+lower_bonud就解决了,妙。 这道题的精髓在于将每个人出价的最大值记录下来,最后竞拍到的一定为没有leave的人中出价最高的那个人(因为It's guaranteed that the sum of k...

weixin_34179968的博客 185

【codeforces 749D】Leaving Auction

【题目链接】:http://codeforces.com/problemset/problem/749/D 【题意】 有n个人在竞价; 按照时间的顺序给出n次竞价(可能有一些人没有参加竞价); 每次竞价以竞价人的编号和竞价给出; 保证竞价严格递增; 且同一个人不会连续竞价两次; 现在,假设去掉某一些竞价的人; 问你最后谁是那个竞价成功的人? 如果去...

173
上一篇: Codeforces 400D. Dima and Bacteria【并查集+最短路】
下一篇: Codeforces Round #388(Div. 2)C. Voting【贪心+模拟】
mengxiang000000
博客等级 码龄11年 627粉丝 2116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值