首页 > 其他分享 >[ABC221D] Online games 题解

[ABC221D] Online games 题解

时间:2024-04-04 10:45:19浏览次数:28  
标签:end int 题解 back 离散 ABC221D Online games

[ABC221D] Online games 题解

思路解析

可以发现题目就是单纯区间加和查询每一个值有多少次出现。首先看到区间修改加结束时查询可以想到差分,但是通过 \(A_i \le 10^9\) 发现值域很大没法直接根据值差分。于是想到离散化,将每个点离散下来,统计每两个离散的时间之间在线的人乘上时间段的长度即可。

code

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, a[N], b[N], c[5 * N], ans[N];
int main() {
	cin >> n;
	vector<int> v;
	for(int i = 1; i <= n; i++) {
		cin >> a[i] >> b[i];
		v.push_back(a[i]);
		v.push_back(a[i] + b[i]);
	}
	v.push_back(n + 1);
	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end());	//离散化去重
	for(int i = 1; i <= n; i++) {
		int pa = lower_bound(v.begin(), v.end(), a[i]) - v.begin() + 1;
		int pb = lower_bound(v.begin(), v.end(), a[i] + b[i]) - v.begin() + 1;
		c[pa]++; c[pb]--;	//差分
	}
	for(int i = 1; i < v.size(); i++) {
		c[i] += c[i - 1];
		ans[c[i]] += v[i] - v[i - 1];	//统计区间
	}
	for(int i = 1; i <= n; i++) {
		cout << ans[i] << ' ';
	}
	return 0;
}

标签:end,int,题解,back,离散,ABC221D,Online,games
From: https://www.cnblogs.com/2020luke/p/18113966

相关文章

  • [ABC223E] Placing Rectangles 题解
    [ABC223E]PlacingRectangles题解思路解析根据题目可知,其实三个长方形无非只有以下两种摆放方式。若大长方形长为\(y\),宽为\(x\),则我们对于第一种情况就固定住宽,判断能否使长度小于等于长;对于第二种情况同样固定住宽,此时A长方形右边空间的长就确定了,就只需要判断B,C......
  • [ABC221E] LEQ 题解
    [ABC221E]LEQ题解思路解析很有思维量的一道题。首先根据题目要求发现,新求的子序列只跟子序列的头尾有关,而在确定头尾之后中间的元素选或不选没有任何关系。也就是确定新子序列的头尾下标分别为\(i,j\),那么以当前头尾的可行子序列个数就是\(2^{j-i-1}=2^j\div2^{i+1}\)种......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第一套)-三语言题解(CPP/Pytho
    ......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第二套)-三语言题解(CPP/Pytho
    ......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析 题解 [ 绿 ] [ 带权并查集 ]
    原题分析本题由于从一个节点发信息,同一个集合内的所有点都会收到信息,显然是一道要求维护各节点间关系的题,因此采用并查集的数据结构进行求解。但由于维护关系的同时还要维护权值,所以采用带权并查集,它是一种能维护某个节点与其祖宗节点之间关系的数据结构。带权并查集找父亲的......
  • 大学教材《C语言程序设计》(浙大版)课后习题解析 | 第九、十章
    概述    本文主要提供《C语言程序设计》(浙大版)第九、十章的课后习题解析,以方便同学们完成题目后作为参考对照。后续将更新第十一、十二章节的课后习题解析,如想了解更多,请持续关注该专栏。专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客​http://......
  • P10296 [CCC 2024 S2] Heavy-Light Composition 题解
    思路先扫一遍,计算每个字母出现的数量,然后判断是否是交替出现。代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intT,n; cin>>T>>n; while(T--){ intt[105]={0}; strings; cin>>s; for(inti=0;i<n;i++)t[s[i]-'a&#......
  • CF1909G Pumping Lemma 题解
    题目链接题目要求我们对合法三元组进行计数,直接做是困难的,因此考虑通过枚举确定一部分元素再进行判定求解,那我们固定什么呢?固定\(x\)和\(y+z\)的分界线没啥用,因此我们枚举确定\(S\)中\(x+y\)和\(z\)的分界线,这样能确定一长串\(y^{k-1}\)所在的区间。接着我们不难想......
  • AGC066 题解
    A将网格黑白染色,将黑色格变为\(\bmod2d=0\),白色格变为\(\bmod2d=d\)。这样代价上界为\(n^2d\)。但是这样的“期望代价”是\(\frac{1}{2}n^2d\)的,考虑将黑色格变为\(\bmod2d=x\),白色格变为\(\bmod2d=d+x\),根据鸽巢原理,一定有一种方案代价在\(\frac{1}{2}n^2d......
  • 【题解】AGC008F | 思维 统计技巧 换根 二次扫描
    题意:给出一个\(n\)个点的树(边权为\(1\))和集合\(S\),求有多少个点集\(T\)可以被表示为离\(S\)中的一个点\(u\)距离不超过\(d\)的点构成的集合(下文称为\(u\)的\(d\)级邻域)。考虑\(S\)为所有点的特殊情况:我们直接求每个点邻域的个数再求和,会算重一些点集,这种情况......