P7910两种解法求教,急!
  • 板块学术版
  • 楼主Starry_dream
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/22 19:33
  • 上次更新2024/10/22 20:54:20
查看原帖
P7910两种解法求教,急!
818820
Starry_dream楼主2024/10/22 19:33

为什么这种只有12分:

#include<bits/stdc++.h>
using namespace std;
int n,q;
struct p
{
	int val,pos;
}a[8005];
int pf[8005];
int cmp(p x,p y)
{
	if(x.val!=y.val)
	{
		return x.val<y.val;
	}
	else
	{
		return x.pos<y.pos;
	}
}
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].val;
		a[i].pos=i;
	}
	sort(a+1,a+n+1,cmp);//cmp函数可以按编号从小到大排列,不需要稳定排序 
	for(int i=1;i<=n;i++)
	{
		pf[a[i].pos]=i;
	}
	while(q--)
	{
		int o;
		cin>>o;
		if(o==1)
		{
			int x,v;
			cin>>x>>v;
			a[pf[x]].val=v;
			for(int i=n;i>=2;i--)
			{
				if(a[i].val<=a[i-1].val) 
				{
					if(a[i].val<a[i-1].val)
					{
						p t=a[i];
						a[i]=a[i-1];
						a[i-1]=t;
					}
					else if(a[i].val==a[i-1].val&&a[i].pos<a[i-1].pos)
					{
						p t=a[i];
						a[i]=a[i-1];
						a[i-1]=t;
					}
				}
//				if(cmp(a[i],a[i-1])){
//						p t=a[i];
//						a[i]=a[i-1];
//						a[i-1]=t;
//					}//前扫
			}
			for(int i=2;i<=n;i++)
			{
				if(a[i].val<=a[i-1].val)
				{
					if(a[i].val<a[i-1].val)
					{
						p t=a[i];
						a[i]=a[i-1];
						a[i-1]=t;
					}
					else if(a[i].val==a[i-1].val&&a[i].pos<a[i-1].pos)
					{
						p t=a[i];
						a[i]=a[i-1];
						a[i-1]=t;
					}
				}
//				if(cmp(a[i],a[i-1])){
//						p t=a[i];
//						a[i]=a[i-1];
//						a[i-1]=t;
//				}
			}
			for(int i=1;i<=n;i++)
			{
				pf[a[i].pos]=i;
			}
		}
		else
		{
			int x;
			cin>>x;
			cout<<pf[x]<<endl;
		}
//		for(int i=1;i<=n;i++)
//		{
//			cout<<b[i].val<<"*"<<b[i].pos<<endl;
//		}
	}
	return 0;
} 

这种就AC了:

#include<bits/stdc++.h>
using namespace std;
int n,q;
struct p
{
	int val,pos;
}a[8005];
int pf[8005];
int cmp(p x,p y)
{
	if(x.val!=y.val)
	{
		return x.val<y.val;
	}
	else
	{
		return x.pos<y.pos;
	}
}
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].val;
		a[i].pos=i;
	}
	sort(a+1,a+n+1,cmp);//cmp函数可以按编号从小到大排列,不需要稳定排序 
	for(int i=1;i<=n;i++)
	{
		pf[a[i].pos]=i;
	}
	while(q--)
	{
		int o;
		cin>>o;
		if(o==1)
		{
			int x,v;
			cin>>x>>v;
			a[pf[x]].val=v;
			for(int i=n;i>=2;i--)
			{
// 				if(a[i].val<=a[i-1].val) 
// 				{
// 					if(a[i].val<a[i-1].val)
// 					{
// 						p t=a[i];
// 						a[i]=a[i-1];
// 						a[i-1]=t;
// 					}
// 					else if(a[i].val==a[i-1].val&&a[i].pos<a[i-1].pos)
// 					{
// 						p t=a[i];
// 						a[i]=a[i-1];
// 						a[i-1]=t;
// 					}
// 				}
				if(cmp(a[i],a[i-1])){
						p kkksc03=a[i];
						a[i]=a[i-1];
						a[i-1]=kkksc03;
					}//前扫
			}
			for(int i=2;i<=n;i++)
			{
				// if(a[i].val<=a[i-1].val)
				// {
				// 	if(a[i].val<a[i-1].val)
				// 	{
				// 		p t=a[i];
				// 		a[i]=a[i-1];
				// 		a[i-1]=t;
				// 	}
				// 	else if(a[i].val==a[i-1].val&&a[i].pos<a[i-1].pos)
				// 	{
				// 		p t=a[i];
				// 		a[i]=a[i-1];
				// 		a[i-1]=t;
				// 	}
				// }
				if(cmp(a[i],a[i-1])){
						p kkksc03=a[i];
						a[i]=a[i-1];
						a[i-1]=kkksc03;
				}
			}
			for(int i=1;i<=n;i++)
			{
				pf[a[i].pos]=i;
			}
		}
		else
		{
			int x;
			cin>>x;
			cout<<pf[x]<<endl;
		}
//		for(int i=1;i<=n;i++)
//		{
//			cout<<b[i].val<<"*"<<b[i].pos<<endl;
//		}
	}
	return 0;
} 
2024/10/22 19:33
加载中...