求这两份代码的区别
  • 板块学术版
  • 楼主fighterkong
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/1/11 20:59
  • 上次更新2023/10/28 12:30:23
查看原帖
求这两份代码的区别
547618
fighterkong楼主2022/1/11 20:59
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
	int x=0,k=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')k=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*k;
}
struct node
{
	int l,r,val;
}e[100005];
struct node1
{
	int val,index;
	bool operator <(const node1 &x)const{return x.val<val;}
};
int a[100005];
bool vis[100005];
priority_queue<node1>q;
inline void del(int x)
{
	e[x].l=e[e[x].l].l;e[x].r=e[e[x].r].r;
	e[e[x].l].r=x;e[e[x].r].l=x;
}
int main()
{
	int n=read(),k=read();
	for(int i=1;i<=n;++i)a[i]=read();
	for(int i=1;i<n;++i)
	{
		e[i].l=i-1;e[i].r=i+1;
		e[i].val=a[i+1]-a[i];
		q.push((node1){e[i].val,i});
	}
	e[0].val=e[n].val=1e9;
	int ans=0;
	while(k--)
	{
		while(vis[q.top().index])q.pop();
		node1 t=q.top();q.pop();
		int po=t.index;
		ans+=t.val;
		vis[e[po].l]=vis[e[po].r]=true;
		e[po].val=e[e[po].l].val+e[e[po].r].val-e[po].val;
		q.push((node1){e[po].val,po});
		del(po);
	}
	printf("%d",ans);
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
	int x=0,k=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')k=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*k;
}
struct node
{
	int l,r,val;
}e[100005];
struct node1
{
	int val,index;
	bool operator <(const node1 &x)const{return x.val<val;}
};
int a[100005];
bool vis[100005];
priority_queue<node1>q;
inline void del(int x)
{
	e[x].l=e[e[x].l].l;e[x].r=e[e[x].r].r;
	e[e[x].l].r=x;e[e[x].r].l=x;
	vis[e[x].l]=vis[e[x].r]=true;
}
int main()
{
	int n=read(),k=read();
	for(int i=1;i<=n;++i)a[i]=read();
	for(int i=1;i<n;++i)
	{
		e[i].l=i-1;e[i].r=i+1;
		e[i].val=a[i+1]-a[i];
		q.push((node1){e[i].val,i});
	}
	e[0].val=e[n].val=1e9;
	int ans=0;
	while(k--)
	{
		while(vis[q.top().index])q.pop();
		node1 t=q.top();q.pop();
		int po=t.index,pi=t.val;
		ans+=pi;
		e[po].val=e[e[po].l].val+e[e[po].r].val-e[po].val;
		q.push((node1){e[po].val,po});
		del(po);
	}
	printf("%d",ans);
	return 0;
}

P3620,下面那份代码过不了样例,上面却可以,感觉含义差不多。。。

2022/1/11 20:59
加载中...