毒瘤输入
查看原帖
毒瘤输入
569235
w9095楼主2023/10/13 23:47

rt,88pts拿到了,特殊输入方式死活调不出来。

#include <bits/stdc++.h>
using namespace std;
int n,type,a[40000010],qs[40000010],pre[40000010],h=1,t=0;
long long s[40000010],qt[40000010];
__int128 ans;
void print(__int128 x)
{
	if(x>9)print(x/10);
	putchar(x%10+'0');
}

int main()
{
    scanf("%d%d",&n,&type);
    if(type==0)
       for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    else if(type==1)
        {
        	long long x,y,z,m,p,l,r,las=0;
        	scanf("%lld%lld%lld%lld%lld%lld",&x,&y,&z,&a[1],&a[2],&m);
        	for(int i=3;i<=n;i++)a[i]=(int)(((x*(long long)a[i-1]%(1<<31)+y*(long long)a[i-2]%(1<<31))%(1<<31)+z)%(1<<31));
        	for(int i=1;i<=m;i++)
        	    {
        	    	scanf("%lld%lld%lld",&p,&l,&r);
                    las++;
        	    	for(int j=las;j<=p;j++,las++)a[j]=(a[j]%(r-l+1))+l;
				}
		}
    for(int i=1;i<=n;i++)s[i]=s[i-1]+a[i];
    qs[++t]=0,qt[t]=0;
    for(int i=1;i<=n;i++)
        {
        while(h<=t&&s[i]>=qt[h])h++;
        h--,pre[i]=qs[h];
        while(h<=t&&(s[i]-s[qs[h]])+s[i]<=qt[t])t--;
        qs[++t]=i,qt[t]=(s[i]-s[qs[h]])+s[i];
        }
    while(n)ans+=(__int128)(s[n]-s[pre[n]])*(__int128)(s[n]-s[pre[n]]),n=pre[n];
    print(ans);
    return 0;
}
2023/10/13 23:47
加载中...