求助,wa一个点
查看原帖
求助,wa一个点
561949
syr1125楼主2023/12/21 20:27
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxN = 1e6 + 5, inf = 0x3f3f3f3f, mod = 317847191;

struct opt
{
	char c;
	int num;
}op[maxN];

int n, m, a[maxN], ans[maxN];

int qpow(int a, int b)
{
	int p = b, ans = 1;
	ans %= mod;
 	while(p > 0)
    {
        if(p % 2 != 0)
            ans = ans * a % mod;
        a = a * a % mod;
        p = p >> 1;    
    }
    return ans % mod;
}

signed main()
{
	scanf("%lld %lld", &n, &m);
	for (int i = 1; i <= n; i ++)
	{
		scanf("%lld", &a[i]);
	}
	sort(a + 1, a + 1 + n);
	for (int i = 1; i <= m; i ++)
	{
		cin >> op[i].c;
		if (op[i].c == 'D')
		{
			scanf("%lld", &op[i].num);
			int x = lower_bound(a, a + 1 + n, op[i].num) - a;
			a[x] = -1;
		}
	}
	
	int minn = inf, maxn = -inf, mul = 1;
	for (int i = 1; i <= n; i ++)
	{
		if (a[i] == -1) continue;
		minn = min(minn, a[i]);
		maxn = max(maxn, a[i]);
		mul = (mul * a[i]) % mod;
	}
	
	int cnt = 0;
	for (int i = m; i >= 1; i --)
	{
		if (op[i].c == 'D')
		{
			minn = min(minn, op[i].num);
			maxn = max(maxn, op[i].num);
			mul = (mul * op[i].num) % mod;
		}
		else if (op[i].c == 'T') ans[++ cnt] = mul;
		else if (op[i].c == 'B') ans[++ cnt] = maxn;
		else if (op[i].c == 'S') ans[++ cnt] = minn;
		else ans[++ cnt] = qpow(maxn, minn);
	}
	
	for (int i = cnt; i >= 1; i --)
	{
		cout << ans[i] << endl; 
	}
	return 0;
}

离线做法

2023/12/21 20:27
加载中...