在每个位置讨论一下最大值最小值的取值范围就行
#include<cstdio>
#include<iostream>
#define maxn 200003
using namespace std;
typedef long long LL;
LL a[maxn],b[maxn]; int main()
{
LL n,s;
while(scanf("%I64d %I64d",&n,&s)!=EOF)
{
LL sum=;
// memset(b,0,sizeof(b));
for(int i=; i<=n; i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
}
if(n==)
printf("%I64d\n",a[]-);
else
{
for(int i=; i<=n; i++)
{
LL tem=s-(sum-a[i]);
if(tem>)
b[i]=tem-;
else
b[i]=;
if(s-(n-)<=a[i])
b[i]+=a[i]-(s-(n-)); }
for(int i=;i<=n;i++)
{
if(i!=)
printf(" ");
printf("%I64d",b[i]);
}
printf("\n");
}
}
return ;
}
注意用long long