52pts,各位眼力比我好的帮忙看看吧
查看原帖
52pts,各位眼力比我好的帮忙看看吧
745395
20120827cjz楼主2024/8/7 21:46
#include <bits/stdc++.h>
using namespace std;
int n,q;
int a[8005],b[2005];
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		int cnt=0;
		for(int j=1;j<=i;j++)
		{
			if(a[j]<=a[i])
			{
				cnt++;
			}
		}
		for(int j=i+1;j<=n;j++)
		{
			if(a[j]<a[i])
			{
				cnt++;
			}
		}
		b[i]=cnt;
	}
	while(q--)
	{
		int num,x,v;
		cin>>num>>x;
		if(num==1)
		{
			cin>>v;
			int ans=0;
			for(int i=1;i<x;i++)
			{
				if(a[i]<=v)
				{
					ans++;
				}
				if(a[i]<=a[x]&&a[i]>v)
				{
					b[i]++;
				}
				if(a[i]>a[x]&&a[i]<=v)
				{
					b[i]--;
				}
			}
			for(int i=x+1;i<=n;i++)
			{
				if(a[i]<v)
				{
					ans++;
				}
				if(a[i]<a[x]&&a[i]>=v)
				{
					b[i]++;
				}
				if(a[i]>=a[x]&&a[i]<v)
				{
					b[i]--;
				}
			}
			b[x]=ans+1;
			a[x]=v;
		}
		else
		{
			cout<<b[x]<<endl;
		}
	}
}

下面是标准程序

#include<bits/stdc++.h>
using namespace std;
int n,q;  //数组长度n 操作次数q
int a[8005],rk[8005]; 
int main()
{
	cin >> n >> q;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		int cnt = 0;
		for (int j = 1; j <= i; j++) {
			if (a[j] <= a[i]) {
				cnt++;
			}
		}
		for (int j = i + 1; j <= n; j++) {
			if (a[j] < a[i]) {
				cnt++;
			}
		}
		rk[i] = cnt;
	}
	while (q--) {
		int num,x,v;
		cin >> num >> x;
		if (num == 1) {
			cin >> v;
			int cnt = 0;
			for (int i = 1; i < x; i++) {
				if (a[i] <= v)  cnt++;
				if (a[i] <= a[x] && a[i] > v)  rk[i]++;
				if (a[i] > a[x] && a[i] <= v)  rk[i]--;
			}
			for (int i = x + 1; i <= n; i++) {
				if (a[i] < v)  cnt++;
				if (a[i] < a[x] && a[i] >= v)  rk[i]++;
				if (a[i] >= a[x] && a[i] < v)  rk[i]--;
			}
			rk[x] = cnt + 1;
			a[x] = v;
		} else {
			cout << rk[x] << endl;
		}
	}
	return 0;
}
2024/8/7 21:46
加载中...