首页 > 其他分享 >CF1719C Fighting Tournament

CF1719C Fighting Tournament

时间:2023-11-22 21:45:44浏览次数:37  
标签:队头 int Tournament Fighting 运动员 maxn CF1719C data

Fighting Tournament

题目传送门

另:多测不清空,WA两行泪

题意

Burenka正准备去观看一年中最有趣的体育活动 —— 她朋友Tonya组织的格斗锦标赛。

n 名运动员参加了大赛,标号分别为为 1,2,... ,n 。第 i 名运动员的实力是 $a_i(1 \le a_i \le n)$每个运动员的实力是不同的,也就是说,数组 a 是 n 的 一种 全排列

大赛的流程是这样的:

一开始,运动员们按标号从小到大排成一列,队头为 1 号运动员,队尾为 n 号运动员。

每轮一次比赛,队头的两个人进行格斗,赢的人(实力较强的人)变成队头,输的人变成队尾

Burenka 问了 Tonya q 个问题,每个问题包含两个整数 ik ,表示 i 号运动员在前 k 轮中会胜多少场

分析

首先可以将这个活动看成一个打擂台,每次实力强的上台,输的下台

那么,可以很容易地发现,如果一个人下台了,那么他就不可能再次上台,因为台上的人的实力一定比他强

所以,一个人胜利的场次一定是一个区间,所以只需要把每个人的范围都预处理一下即可

代码

代码还是挺简单的,但是要注意几个坑:

  1. 除了第一个人之外,每个人都是可以和自己身前的人打一架的,所以是比第一个人要多一场的,也就是说第一个人需要减1(我为了方便就写成了-(i==1)

  2. 每个人都是可以最少和身前还有身后两个人打架的,所以当他下台和$k$作比较时,记得$k$要$+1$

代码如下:

#include<bits/stdc++.h>
using namespace std;

const int Maxn=2e5+10;
int n,q,maxn;
struct node
{
    int st,en;
    int data;
}a[Maxn];

void run()
{
    cin>>n>>q;maxn=0;
    for(int i=0;i<=n;i++) a[i].st=a[i].en=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].data;
        if(a[i].data>a[maxn].data) a[maxn].en=i-1,a[i].st=i,maxn=i;
    }
    a[maxn].en=n;
//    for(int i=1;i<=n;i++) cout<<a[i].st<<" "<<a[i].en<<endl;
    while(q--)
    {
        int i,k;
        cin>>i>>k;
        if(k<i-1) cout<<0;
        else if(i==maxn) cout<<k-i+2-(i==1);
        else if(a[i].st==0) cout<<0;
        else cout<<min(k+1,a[i].en)-a[i].st+1-(i==1);
        cout<<endl;
    }
}

int main()
{
    int t;
    cin>>t;
    while(t--) run();
}

标签:队头,int,Tournament,Fighting,运动员,maxn,CF1719C,data
From: https://www.cnblogs.com/lyk2010/p/17850359.html

相关文章

  • [AGC009B] Tournament 题解
    思路考虑树形\(\text{dp}\)。我们将每个人与把自己淘汰的人连边。得到一颗以一为根的树。由于我们需要求出必须赢的场数最多的那位选手,至少要赢多少场。考虑最多的限制。可以使用树型动态规划。每一次两个人比赛的代价为:\[dp_i=\max(dp_i,dp_j)+1\]这样就达成了最多的限......
  • [IJCAI 2023]Fighting against Organized Fraudsters Using Risk Diffusion-based Par
    [IJCAI2023]FightingagainstOrganizedFraudstersUsingRiskDiffusion-basedParallelGraphNeuralNetwork文章设计了一种基于社区的医疗保险欺诈行为检测。模型为了提高精度,模型设计了一组异构图模型和一组同构图模型。输入的异构图是保险受益人-医疗服务提供者的图,......
  • GIS开发与应用(PostgreSQL空间数据库各种查询语句范例以及SQL语句查询空间关系)_postgre
    实验二PG空间数据库应用实验目的:实验准备实验内容及要求实验过程及步骤:1、创建空间数据库nyc,在nyc空间数据库中创建geometries表,对表中插入Point、Linestring、Polygon、PolygonWithHole、collection等几何要素。2、查看geometries表中的几何图形的元数据。使用`ST_G......
  • CF323B - Tournament-Graph
    题意:构造一个\(n\)大小的锦标赛图,即每两点之间恰有一条有向边,满足任意点对\((u,v)\),都存在一条从\(u\)到\(v\),长度不超过\(2\)的路径。方法一考虑奇数情况,假设我们的点是在环上排列的,那么我们对任意的跨越不超过半个环的边都连上,也就是说,我们把点看成圆上的若干个等分点......
  • CF1260E Tournament 题解
    妙妙题,但是感觉评不到紫。题目链接。题意luogu题意。有\(n\)个人,贿赂第\(i\)个人的代价为\(a_i\)。这些人中,贿赂代价为\(-1\)的是你的朋友。现在,你可以两两配对,使得编号小的被淘汰,但是,如果你贿赂了编号大的,那么编号大的被淘汰,而编号小的留下。问:使得你朋友夺得冠军的......
  • 2018icpc青岛F . Tournament
    题目链接:https://codeforces.com/gym/104270/problem/F题意:有n个武士,编号1~n,要进行k轮比赛,每轮比赛中所有武士都要出现,然后两名武士之间会发生决斗,并且一名武士在一轮比赛中只会与另外一名武士决斗,发生决斗的这两名武士,在其他轮比赛中,将不会再次决斗。问能否构造出来符合题......
  • Martial Arts Tournament (CF2D) (2^条件性质, 问题切入的基点转化)
     思路:首先对队列大小排序(预处理)直接对队列进行分割,情况很多利用2^ni这个优秀的复杂度,种类很小转换枚举对象暴力枚举这个2段这个即可,中间处理利用二......
  • [at code festival 2017 I]Full Tournament
    为了方便,以下编号和下标范围均为\([0,2^{n})\)定义\[\begin{cases}f_{0}(a)=a\\f_{i+1}(a)_{j}=\begin{cases}\min(f_{i}(a)_{j},f_{i}(a)_{j+2^{i}})&j二进制下第i位为0......
  • Educational Codeforces Round 141:C. Yet Another Tournament
    一、来源:Problem-C-Codeforces二、题面三、思路读题:其他人的胜场由位次决定,对于第i位,其胜场为i-1人数为\(5·10^5\),不是5(看错了)每个人和自己比较时,可能......
  • Codeforces1260 E Tournament(贪心)
    Description:Youareorganizingaboxingtournament,wherenboxerswillparticipate(ispowerof),andyourfriendisoneofthem.Allboxershavedifferents......