首页 > 其他分享 >CWOI DS 专题 2

CWOI DS 专题 2

时间:2023-12-21 20:34:32浏览次数:27  
标签:专题 int SIZ CWOI ch getchar root DS define

怎么又开一个 ds 专题啊/yun

A - 如何正确地排序

以前写的,把以前写的题解贺过来。

正难则反,总贡献减去不会成为 \(\min/\max\) 的数。 \(B_i+B_j\) 不会产生贡献的条件就是存在 \(A_i+A_j,C_i+C_j\) 满足 \(\begin{cases}A_i+A_j\le B_i+B_j\\B_i+B_j\le C_i+C_j\end{cases}\),移项可得 \(\begin{cases}A_i-B_i\le B_j-A_j\\B_i-C_i\le C_j-B_j\end{cases}\)。两边的项都只和 \(i,j\) 有关系,可以直接算出来。枚举 \(A,B,C\),这就是一个二维数点。注意相等会算两遍,我们可以钦定行数大的更大。因为有负数,要开两倍空间。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=1e18,SIZ=2e5;
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;
}
struct BIT{
	int c[400005];
	void clear(){memset(c,0,sizeof(c));}
	void add(int x,int k){
		for(;x<=SIZ<<1;x+=x&-x)c[x]+=k;
	}
	int ask(int x){
		int res=0;for(;x;x-=x&-x)res+=c[x];
		return res;
	}
}Tr;
struct Node{
	int op,x,y,id;
}q[400005];
int cmp(Node x,Node y){
	return (x.x!=y.x)?(x.x<y.x):(x.op<y.op);
}
int n,m,ans,a[5][200005];
void calc(int x,int y,int z){
	Tr.clear();
	for(int i=1;i<=m;i++){
		q[i]=(Node){0,(a[x][i]-a[y][i])+(x>y)+SIZ,(a[y][i]-a[z][i])+(y>z)+SIZ,i};
		q[i+m]=(Node){1,-(a[x][i]-a[y][i])+SIZ,-(a[y][i]-a[z][i])+SIZ,i};
	}
	sort(q+1,q+m*2+1,cmp);
	for(int i=1;i<=m*2;i++){
		if(q[i].op==0)Tr.add(q[i].y,1);
		else ans-=a[y][q[i].id]*Tr.ask(q[i].y);
	}
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
		a[i][j]=read(),ans+=a[i][j]*2*m;
	for(int i=n+1;i<=4;i++)for(int j=1;j<=m;j++)
		a[i][j]=a[i-n][j],ans+=a[i][j]*2*m;
	n=4;
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)
		if(i!=j&&i!=k&&j!=k)calc(i,j,k);
	printf("%lld",ans);
	return 0;
}

L - Souvenirs

典,考虑所有 \(i<j,a_i\ge a_j\) 的 \((i,j)\) 的贡献,\(a_i\le a_j\) 的贡献可以令 \(a_i\gets -a_i\) 再做一遍。枚举 \(i\),向左找到第一个 \(j\) 满足 \(a_j\ge a_i\),注意到此时一对 \((k,i),k<j<i\) 可能有用的条件是 \(a_i\le a_k\le\lfloor\dfrac{a_i+a_j}{2}\rfloor\),因为如果更靠近 \(a_j\),那么如果一个询问包含 \((k,i)\),那 \((k,j)\) 也一定可选,且一定比 \((k,i)\) 更优。如果 \(a_k>a_j\) 那更不行了。于是一个位置只会有不超过 \(\log V\) 对有用的答案,找出来之后扫描线即可,复杂度 \(\mathcal{O}(n\log n\log V)\)。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#ifdef DEBUG
#define msg(args...) fprintf(stderr,args)
#else
#define msg(...) void()
#endif
using namespace std;
const int inf=1e18,V=1e9;
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;
}
struct segtree{
	#define ls (lc[p])
	#define rs (rc[p])
	#define lson l,mid,ls
	#define rson mid+1,r,rs
	int T,lc[4000005],rc[4000005],mx[4000005];
	void clear(){
		for(int i=0;i<=T;i++)lc[i]=rc[i]=0,mx[i]=-inf;
		T=0;
	}
	void pushup(int p){
		mx[p]=max(mx[ls],mx[rs]);
	}
	void add(int l,int r,int &p,int x,int v){
		if(!p)p=++T,mx[p]=-inf;
		if(l==r){mx[p]=max(mx[p],v);return;}
		int mid=(l+r)>>1;
		if(x<=mid)add(lson,x,v);
		else add(rson,x,v);
		pushup(p);
	}
	int ask(int l,int r,int p,int L,int R){
		if(!p)return -inf;
		if(L<=l&&r<=R)return mx[p];
		int mid=(l+r)>>1,res=-inf;
		if(L<=mid)res=max(res,ask(lson,L,R));
		if(R>mid)res=max(res,ask(rson,L,R));
		return res;
	}
	#undef lson
	#undef rson
	#undef ls
	#undef rs
}Tr;
int a[100005],ql[300005],qr[300005],ans[300005];vector<int>v[100005],t[100005];
signed main(){
	int n=read(),root=0;
	for(int i=1;i<=n;i++)a[i]=read();
	int m=read();
	for(int i=1;i<=m;i++)ql[i]=read(),qr[i]=read(),v[qr[i]].push_back(i),ans[i]=inf;
	Tr.clear();root=0;
	for(int i=1;i<=n;i++){
		int j=V;
		while(a[i]<=j){
			int p=Tr.ask(0,V,root,a[i],j);if(p<=0)break;
			t[i].push_back(p);
			if(a[p]==a[i])break;
			j=(a[i]+a[p])>>1;
		}
		Tr.add(0,V,root,a[i],i);
	}
	Tr.clear();root=0;
	for(int i=1;i<=n;i++){
		for(auto x:t[i])Tr.add(1,n,root,x,a[i]-a[x]);
		for(auto x:v[i])ans[x]=min(ans[x],-Tr.ask(1,n,root,ql[x],qr[x]));
	}
	for(int i=1;i<=n;i++)a[i]=V-a[i],t[i].clear();
	Tr.clear();root=0;
	for(int i=1;i<=n;i++){
		int j=V;
		while(a[i]<=j){
			int p=Tr.ask(0,V,root,a[i],j);if(p<=0)break;
			t[i].push_back(p);
			if(a[p]==a[i])break;
			j=(a[i]+a[p])>>1;
		}
		Tr.add(0,V,root,a[i],i);
	}
	Tr.clear();root=0;
	for(int i=1;i<=n;i++){
		for(auto x:t[i])Tr.add(1,n,root,x,a[i]-a[x]);
		for(auto x:v[i])ans[x]=min(ans[x],-Tr.ask(1,n,root,ql[x],qr[x]));
	}
	for(int i=1;i<=m;i++)printf("%lld\n",ans[i]);
	return 0;
}

标签:专题,int,SIZ,CWOI,ch,getchar,root,DS,define
From: https://www.cnblogs.com/xx019/p/17920054.html

相关文章

  • 高云FPGA的LVDS应用
    本板卡提供如下例程,主要基于具体案例,聚焦于摄像头采集,LCD屏驱动显示等图像处理相关。像GPIO,CLK,LED等这种简单的操作都放到具体实例中了,不再一一介绍,常用的IP也是非常简单的操作,高云文档有些写得不太仔细,如遇到不清楚的地方可以联系官方FAE或者我这边。3.1LVDS的应用LVDS使用......
  • 嵌入式教程_DSP教学实验箱操作:5-14 灰度图像二值化(LCD显示)
    一、实验目的学习灰度图像二值化的原理,掌握图像的读取方法,并实现在LCD上显示二值化前后的图像。二、实验原理图像二值化图像的二值化处理就是将图像上的点的灰度置为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可......
  • Landsat7_C2_ST数据集2019年1月-2022年12月
    简介:Landsat7_C2_ST数据集是经大气校正后的地表温度数据,属于Collection2的二级数据产品,以开尔文为单位测量地球表面温度,是全球能量平衡研究和水文模拟中的重要地球物理参数。地表温度数据还有助于监测作物和植被健康状况,以及极端高温事件,如自然灾害(如火山爆发、野火)和城市热岛效......
  • GEE好文推荐——利用样本点迁移方法快速实现全球范围内1984年至今基于Landsat影像的土
    最近我新发表了一篇新的文章,也就是利用样本点迁移的方法来快速实现全球长时序快速土地分类,本文发布了应用APP,用户可以在线体验使用快速分类的效果。原文链接:Land|FreeFull-Text|RapidLandCoverClassificationUsinga36-YearTimeSeriesofMulti-SourceRemoteSensing......
  • 242-InetAddress.getLocalHost().getHostName() took 20021 milliseconds to respond
    一台windows服务器,要部署jar,启动成功,却无法正常请求。会报错:InetAddress.getLocalHost().getHostName()took20021millisecondstorespond.Pleaseverifyyournetworkconfiguration.经查,该服务器启动了一个其他服务,该服务占用了所有的网络请求带宽,导致网络不通。找到服......
  • mybatisPlus注解fill = FieldFill.UPDATE和updateStrategy = FieldStrategy.IGNORED的
    由于当时使用mybatisPlus的updateById更新数据,习惯性的认为字段为null的不更新。但是上线后,出问题了。只更新状态字段,其他的一些属性竟然被置空了。赶紧排查,发现实体类中这些字段有fill=FieldFill.UPDATE,导致更新的时候如果这个字段为null也会更新为null。 同样作用的还有@T......
  • Landsat7_C2_SR数据集(大气校正地表发射率数据集)
    Landsat7_C2_SR数据集是经大气校正后的地表反射率数据,属于Collection2的二级数据产品,空间分辨率为30米,基于Landsat生态系统扰动自适应处理系统(LEDAPS)(版本3.4.0)生成。水汽、臭氧、大气高度、气溶胶光学厚度、数字高程与Landsat数据一起输入到太阳光谱(6S)辐射传输模型中对卫星信号进......
  • LANDSAT_7/02/T1/TOA的Landsat7_C2_TOA类数据集
    Landsat7_C2_TOA数据集是将数据每个波段的辐射亮度值转换为大气层顶表观反射率TOA,是飞行在大气层之外的航天传感器量测的反射率,包括了云层、气溶胶和气体的贡献,可通过辐射亮度定标参数、太阳辐照度、太阳高度角和成像时间等几个参数计算得到。为了便于在线分析存储,平台将影像像素值......
  • 华企盾DSC为平面设计公司提供数据防泄漏解决方案
    华企盾DSC作为一款专业的数据防泄漏解决方案,为平面设计公司提供多方位而有效的安全保障。以下是该解决方案为平面设计公司所带来的主要优势:图纸加密保护:超安全的加密技术确保设计公司的图纸和敏感信息得到最高级别的保护。通过加密,即使数据传输过程中发生泄露,也能有效防止未经......
  • 【专题】2022中国新能源汽车内容生态趋势洞察报告PDF合集分享(附原数据表)
    原文链接:http://tecdat.cn/?p=31970《报告》以关注新能源汽车内容的网络用户和中国新能源汽车企业为研究对象,选择了与新能源汽车有关的网络内容(图片,直播,视频,用户评价),并与中国新能源汽车产业的生产和销售数据相结合,展开了一项调查。阅读原文,获取专题报告合集全文,解锁文末68份新能......