求问 神奇CE
查看原帖
求问 神奇CE
1038651
llamn楼主2024/9/11 21:35

本地编译能过,洛谷上显示

g++: 编译器内部错误:CPU time limit exceeded signal terminated program cc1plus
Please submit a full bug report, with preprocessed source (by using -freport-bug).
参阅 <https://gcc.gnu.org/bugs/> 以获取指示。

或者:

Nothing is compiled: CPU_TIME exceeds.

以及更离谱的:

g++: 编译器内部错误:CPU time limit exceeded signal terminated program cc1plus
请提交一份完整的错误报告,
如有可能请附上经预处理后的源文件。
参阅 <https://gcc.gnu.org/bugs/> 以获取指示。

代码:

#include <bits/stdc++.h> 
#define _eggy_ using 
#define _party_ namespace
#define pf printf
#define sf scanf
#define TLE() while(1);
#define un unsigned
#define mod(x) ((x))
#define eggy (1145141919810ll)
#define _eggy() (((p1==p2) && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2))?EOF:*p1++)
_eggy_ _party_ std;char *p1,*p2,buf[100000];long long read();
int n,m,i,j,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30;

long long v,ans,a[1000100];
template<un char ceng> // dzpd<i> 可以记录 1 << i  
struct dzpd
{
	struct dzpd <ceng-1> ls,rs;
	int l,r;
	long long maxx = 0ll,mini_add = 0ll,mini_eq = eggy;
	void bd(int bdl, int bdr)
	{
		l = bdl, r = bdr;
		if (bdl == bdr)
		{
			maxx = a[bdl];
			return;
		}
		ls.bd(bdl,(bdl+bdr)>>1);
		rs.bd(((bdl+bdr)>>1)+1,bdr);
		maxx = max(ls.maxx , rs.maxx);
	}
	void miniworld()
	{
		if (mini_eq != eggy)
		{
		    ls.maxx = mini_eq, ls.mini_add = 0ll, ls.mini_eq = mini_eq;
		    rs.maxx = mini_eq, rs.mini_add = 0ll, rs.mini_eq = mini_eq;
		    mini_eq = eggy;
		}
		ls.maxx = ls.maxx + mini_add;
		ls.mini_add += mini_add; 
		rs.maxx = rs.maxx + mini_add;
		rs.mini_add += mini_add; 
		mini_add = 0ll;
	}
	void add() //编号被模版吃了,l,r留在全局变量里,成功实现无参函数! 
	{
		if ((t1 <= l) && (r <= t2))
		{
			mini_add += v;
			maxx += v; // 由于全局修改l~r,所以即使v<0,也只能直接加 
			return;
		}miniworld();
		if (t2 <= ls.r) ls.add();
		else if (t1 >= rs.l) rs.add();
		else {ls.add(); rs.add();}
		maxx = max(ls.maxx , rs.maxx);
	}
	void eq()
	{
		if ((t1 <= l) && (r <= t2))
		{
			mini_eq = v;
			mini_add = 0;
			maxx = v;
			return;
		}miniworld();
		if (t2 <= ls.r) ls.eq();
		else if (t1 >= rs.l) rs.eq();
		else {ls.eq(); rs.eq();}
		maxx = max(ls.maxx , rs.maxx);
	}
	long long getmax()
	{
		if ((t1 <= l) && (r <= t2))
		{
			return maxx;
		}miniworld();
		if (t2 <= ls.r) return ls.getmax();
		else if (t1 >= rs.l) return rs.getmax();
		else {return max(ls.getmax() , rs.getmax());}
	}
};
template<>
struct dzpd<0>
{
	int l,r;
	long long maxx = 0ll,mini_add = 0ll,mini_eq = eggy;
	void bd(int bdl, int bdr) {l = bdl, r = bdr, maxx = a[bdl];}
	void add() {maxx += v;}
	void eq() {maxx = v;}
	long long getmax(){return maxx;}
};

struct dzpd <20> t;

int main()
{
	//freopen("P3373_2.in","r",stdin);
	n = read(), m = read();
	for (i = 1; i <= n; i++) a[i] = read();
    t.bd(1,n);
    for (i = 1; i <= m; i++)
    {
    	t0 = read();
    	switch(t0)
    	{
    		case 2:
				t1 = read(), t2 = read(), v = read();
    			t.add(); break;
    		case 3:
    			t1 = read(), t2 = read();
				pf("%lld\n",t.getmax()); break;
			case 1:
				t1 = read(), t2 = read(), v = read();
    			t.eq(); break;
		}
	}
    return 0;
}
long long read()
{
    long long x=0,f=1ll;
    char ch=_eggy();
    while(ch<48||ch>57)
    {
        if(ch=='-') f=-1ll;
        ch=_eggy();
    }
    while(ch>=48&&ch<=57)
    {x=x*10+ch-48,ch=_eggy();}
   	return x*f;
}
2024/9/11 21:35
加载中...