NICA 校际交流 #1(同步赛)可以打开通道吗
  • 板块学术版
  • 楼主Shadow_T
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/4/15 20:58
  • 上次更新2023/10/23 18:22:20
查看原帖
NICA 校际交流 #1(同步赛)可以打开通道吗
734379
Shadow_T楼主2023/4/15 20:58

[梦熊-四月-T8] 序列

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[500005];
int dps[500005];
int dp[500005];
int dpf[500005];
int dpfs[500005];
int f[500005];
signed main()
{
	int n,m,y=0,l=0,l1=0;
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		if(a[i]<0) dp[-a[i]]+=a[i],dps[abs(a[i])]++,dpf[-a[i]]+=a[i],dpfs[0]++;
		else dp[0]+=a[i],dps[0]++,dpf[-a[i]]+=a[i],dpfs[-a[i]]++;
		if(a[i]<0) l=max(l,-a[i]);
		else l1=max(l1,a[i]);
    }
    for(int i=1;i<=l;i++)
    dp[i]=dp[i-1]+dp[i],dps[i]=dps[i-1]+dps[i];
    for(int i=1;i<=l1;i++)
    dpf[i]=dpf[i-1]+dpf[i],dpfs[i]=dpfs[i-1]+dpfs[i];
	int op,x;
	for(int i=1;i<=m;i++)
	{
		scanf("%lld",&op);
		if(op==1)
		{
			scanf("%lld",&x);
			y+=x;
		}
		if(op==2)
		{
			if(y>l)
			printf("%lld\n",dp[l]+y*dps[l]);
			if(y<0)
			{
				if(y<-l1)
				printf("0\n");
				else printf("%lld",dpf[y]+y*dpfs[y]);
			} 
			if(y>=0&&y<=l) printf("%lld\n",dp[y]+y*dps[y]);
	    }
	}
}

赛后订正,没法验证,也请大佬们点一下错误

2023/4/15 20:58
加载中...