首页 > 其他分享 >CF1719C Fighting Tournament 题解

CF1719C Fighting Tournament 题解

时间:2022-08-17 18:36:22浏览次数:78  
标签:node 答案 int 题解 Tournament Fighting 100010 ans now

思路

根据题意,很容易看出,每个人都完成一次比赛后,即完成 \(n-1\) 轮之后,力量值最大的人会留在第一的位置,且在第 \(n-1\) 轮完成后,除了力量值最大的人,其他人的胜场数都不会再增加了。所以问题的关键是求所有人都完成一轮,即前 \(n-1\) 轮比赛之前的答案。

考虑将所有询问离线处理,并按 \(k\) 的大小进行排序,然后暴力模拟前 \(n-1\) 轮比赛的情况,同时统计出所有求前 \(n-1\) 轮的询问的答案,并储存下来。之后统计答案的时候判断一下当前询问的点是不是最大值,如果是最大值,在 \(n-1\) 轮结束后的答案上加上 \(k-n+1\)。如果不是最大值直接输出 \(n-1\) 轮结束时的答案即可。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int t, n, q, a[100010], ans[100010], w[100010];

struct node {
	int x, k, num;
} ask[100010];

bool cmp(node a, node b) {
	return a.k < b.k;
}

signed main() {
	scanf("%lld", &t);

	while (t--) {
		memset(w, 0, sizeof(w));
		memset(ans, 0, sizeof(ans));
		scanf("%lld%lld", &n, &q);

		for (int i = 1; i <= n; i++) {

			scanf("%lld", &a[i]);
		}

		for (int i = 1; i <= q; i++) {

			scanf("%lld%lld", &ask[i].x, &ask[i].k);
			ask[i].num = i;
		}

		int tot = 1, now = 1;
		sort(ask + 1, ask + 1 + q, cmp);

		for (int i = 2; i <= n; i++) {

			if (a[i] > a[now]) {
				w[i]++;
				now = i;
			} else {
				w[now]++;
			}

			while (ask[tot].k == (i - 1) && tot <= q) {
				ans[ask[tot].num] = w[ask[tot].x];
				tot++;
			}
		}

		for (int i = tot; i <= q; i++) {

			if (ask[i].x != now) {
				ans[ask[i].num] = w[ask[i].x];
			} else {
				ans[ask[i].num] = w[now] + (ask[i].k - n + 1);
			}
		}

		for (int i = 1; i <= q; i++) {

			printf("%lld\n", ans[i]);
		}
	}

	return 0;
}

标签:node,答案,int,题解,Tournament,Fighting,100010,ans,now
From: https://www.cnblogs.com/Dregen-Yor/p/16596321.html

相关文章

  • CF1719A Chip Game 题解
    题目传送门。思路当其中一个人不能动的时候,这个人一定位于点\((n,m)\)上。令点\((n,m)\)为终点。当\(n\)和\(m\)都是奇数或当\(n\)和\(m\)都是偶数时,赢的人......
  • CF1719B Mathematical Circus 题解
    一道不错的构造题。思路先说一句废话,能被\(4\)整除的数在除以\(2\)之后得到的数还是一个偶数。我们可以根据\(k\)的奇偶性以及\(k\)除以\(2\)之后的奇偶性分......
  • BSOJ7020题解
    脑抽了。考场上应该做掉这题的。所以实际挂分从100pts变成了200pts/fn/fn/fn考虑用一个二元组来维护链,\((f,g)\)表示这个集合的所有链的点权和为\(f\),有\(g\)条链,目......
  • 针对“RuntimeError: each element in list of batch should be of equal size” 问题
    第一次运行代码出现了这个问题:这个问题的出现主要来源于DataLoader类中的collate.py文件造成的问题,由于每个batch里的长度不一致,因此导致出现了该问题。通过百度方法和......
  • 「AGC012F」Prefix Median 题解 (DP)
    题目简介给定一个长度为\(2n-1\)的序列\(a\),你可以随意排列\(a\)中的元素,请求出有多少种不同的序列\(b\),满足\(b\)的长度为\(n\)。\(b_i=\{a_1\ldotsa_{2......
  • 洛谷P1972HH的项链 题解
    P1972[SDOI2009]HH的项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含......
  • LeetCode 螺旋矩阵 II 算法题解 All In One
    LeetCode螺旋矩阵II算法题解AllInOnejs/ts生成螺旋矩阵螺旋矩阵原理图解动态赋值arr[i]//动态更新indexleti=0;while(left<=right&&t......
  • ARC094D题解
    设\(A<B\),\(C=\max(\sqrt{AB-1},A)\),答案为:\[C-1+\frac{AB-1}{C+1}\]如果\(A>B\)时显然可以互换,接下来称\(A\)所在的比赛为第一场比赛,\(B\)所在的比赛为第二场比赛......
  • 题解 [ZJOI2010]排列计数
    好题。%你赛考到了不会摆烂,后来发现原来有向下取整,题面没有。。。(就算有我也做不出来啦qAq首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数。首先最小的......
  • ubuntu16.04中文乱码问题解决
    1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修......