首页 > 其他分享 >CF19D. Points

CF19D. Points

时间:2023-06-19 11:25:33浏览次数:41  
标签:ch return CF19D int Points ma inf define

感觉不难啊,为什么是 *2800 捏。

先离散化。对每个横坐标开一个 set 存点,插入删除就能做了。查询的时候线段树二分就行了。

更具体地,我们维护区间内纵坐标的最大值,在二分的时候能左就左,不能左就右。

注意这里的右上角是严格大于。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define mk make_pair
#define fi first
#define se second
using namespace std;
typedef pair<int,int>pii;
const int inf=1e18;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
char s[105];
struct Que{
	int op,x,y;
}q[200005];
struct segtree{
	#define ls p<<1
	#define rs p<<1|1
	#define lson l,mid,ls
	#define rson mid+1,r,rs
	struct Node{
		multiset<int>s;
		int ma;
	}c[800005];
	void pushup(int p){
		c[p].ma=max(c[ls].ma,c[rs].ma);  
	}
	void build(int l,int r,int p){
		if(l==r){c[p].s.clear();c[p].ma=-inf;return;}
		int mid=(l+r)>>1;
		build(lson),build(rson);
		pushup(p);
	}
	void update(int l,int r,int p,int x,int y,int op){
		if(l==r){
			if(op==1)c[p].s.insert(y);
			else c[p].s.erase(c[p].s.find(y));
			if(c[p].s.empty())c[p].ma=-inf;
			else c[p].ma=*c[p].s.rbegin();
			return;
		}
		int mid=(l+r)>>1;
		if(x<=mid)update(lson,x,y,op);
		else update(rson,x,y,op);
		pushup(p);
	}
	pii ask(int l,int r,int p,int y){
		if(c[p].ma<y)return mk(inf,inf);
		if(l==r)return mk(l,(*c[p].s.lower_bound(y)));
		int mid=(l+r)>>1;
		if(c[ls].ma>=y)return ask(lson,y); 
		else return ask(rson,y);
	}
	pii find(int l,int r,int p,int L,int R,int y){
		if(L>R)return mk(inf,inf);
		if(L<=l&&r<=R)return ask(l,r,p,y);
		int mid=(l+r)>>1;pii res=mk(inf,inf);
		if(L<=mid)res=min(res,find(lson,L,R,y));
		if(R>mid)res=min(res,find(rson,L,R,y));
		return res;
	}
	#undef ls
	#undef rs
	#undef lson
	#undef rson
}Tr;
int bx[200005],by[200005];
signed main(){
	int n=read();
	for(int i=1,op,x,y;i<=n;i++){
		scanf("%s",s);x=read(),y=read();
		if(s[0]=='a')op=1;
		else if(s[0]=='r')op=2;
		else op=3;
		q[i]=(Que){op,x,y};
	}
	int tx=0,ty=0;
	for(int i=1;i<=n;i++){
		bx[++tx]=q[i].x;
	}
	sort(bx+1,bx+tx+1);tx=unique(bx+1,bx+tx+1)-bx-1;
	for(int i=1;i<=n;i++){
		q[i].x=lower_bound(bx+1,bx+tx+1,q[i].x)-bx;
	}
	for(int i=1;i<=n;i++){
		by[++ty]=q[i].y;
	}
	sort(by+1,by+ty+1);ty=unique(by+1,by+ty+1)-by-1;
	for(int i=1;i<=n;i++){
		q[i].y=lower_bound(by+1,by+ty+1,q[i].y)-by;
	}
	Tr.build(1,tx,1);
	for(int i=1;i<=n;i++){
		int op=q[i].op,x=q[i].x,y=q[i].y;
		if(op==3){
			pii res=Tr.find(1,tx,1,x+1,tx,y+1);
			if(res==mk(inf,inf))puts("-1");
			else printf("%lld %lld\n",bx[res.fi],by[res.se]);
		}
		else{
			Tr.update(1,tx,1,x,y,op);
		}
	}
	return 0;
}

标签:ch,return,CF19D,int,Points,ma,inf,define
From: https://www.cnblogs.com/xx019/p/17490647.html

相关文章

  • 如何查看在当前的ingress-controller中,有哪些backend?每个backend的endpoints是什么?
    通过kubectlingress-nginx命令,可以查看在ingresscontroller中,有哪些backends,每个backends的后端的endpoints信息和对应其他的参数设置 比如: kubectlingress-nginxbackends-ningress-nginx  [root@nccztsjb-node-23data]#kubectlingress-nginxbackends-n......
  • Visible Lattice Points 题解
    VisibleLatticePoints题目大意给定一个\(N×N×N\)的由若干点组成的立方体,点的坐标从\((0,0,0)\)到\((N,N,N)\),求从点\((0,0,0)\)处可以看见多少个点。思路分析我们将立方体上的点分成三类:在\(xy,yz,xz\)平面上的点。在\(x,y,z\)轴上的点。即不在平面,也不在......
  • Sep 2022-Prioritized Training on Points that are Learnable, Worth Learning, and
    摘要:对网络规模的数据进行训练可能需要数月时间。但大多数计算和时间都浪费在已经学习或无法学习的冗余和噪声点上。为加速训练,本文提出了ReducibleHoldoutLossSelection(RHOLOSS),一种简单但有原则的技术,近似地选择那些最能减少模型泛化损失的点进行训练。因此,rho损失缓解了现......
  • 牛客 55994 2023牛客五一集训派对day3 D Points Construction Problem
    D-PointsConstructionProblem_2023牛客五一集训派对day3(nowcoder.com)将图上恰好\(n\)个点染成黑色,使得图上相邻的黑白点对数量恰好为\(m\)考虑\(n\)个黑点如果不相邻,则两个点的贡献互不影响考虑相邻的情况,我们把相邻的点连边,则贡献为每一个连通块的贡献的和,我们用......
  • image as set of points
    ImageAsSetOfPointsAbstract提取图像特征的几种方法:ConvNets:将图像视为矩形中有组织的像素,并通过局部区域的卷积运算提取特征;VisionTransformers(ViTs):将图像视为一系列补丁,并通过全局范围内的注意力机制提取特征。ContextClusters(CoCs):上下文聚类将图像视为一组......
  • UVA How Many Points of Intersection?
      HowManyPointsofIntersection? a dotsonthetoprowand b dotsonthebottomrow.Wedrawlinesegmentsconnectingeverydotonthetoprowwitheverydotonthebottomrow.Thedotsarearrangedinsuchawaythatthenumberofinternalintersectio......
  • poj 3090 Visible Lattice Points
     #include<iostream>#include<algorithm>usingnamespacestd;constintM=1e6;intvis[M+4],P[M+4],cnt;intfi[M+4];voidshai(inttop){ cnt=0; fi[1]=1; for(inti=2;i<=top;i++){ if(vis[i]==0){ P[++cnt]=i; fi[i]=i-1;......
  • 什么是 Angular library 的 secondary entry points?
    在Angular应用程序和库中,secondaryentrypoints(次要入口点)是指与主入口点不同的导出和发布方式。主入口点是指在package.json文件中声明的默认的入口点,它通常包含了该库的主要功能和API。而secondaryentrypoints则是在Angularlibrary项目中定义的额外的入口点,它们可......
  • SimpleDateFormat并发引发的multiple points 异常以及解决
    SimpleDateFormat并发引发的multiplepoints异常以及解决一、问题分析SimpleDateFormat并发会出现如下问题:1、java.lang.NumberFormatException:multiplepoints 2、 java.lang.NumberFormatException:emptyString 3、java.lang.NumberFormatException:Forinputs......
  • Static Probe Points in GDB
    参考:https://sourceware.org/gdb/onlinedocs/gdb/Static-Probe-Points.htmlhttps://man7.org/linux/man-pages/man3/stapprobes.3stap.html infoprobes--Showav......