本地和洛谷IDE正常,提交全RE求助
查看原帖
本地和洛谷IDE正常,提交全RE求助
306954
芊枫Thomitics楼主2021/6/28 14:46
#include <bits/stdc++.h>
#define INF 999999999

using namespace std;

inline long long read()
{
	long long x = 0;
	int f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9')
	{
		if (ch == '-')
			f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
	{
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
void write(const long long &x)
{
	if (!x)
	{
		putchar('0');
		return;
	}
	char f[100];
	long long tmp = x;
	if (tmp < 0)
	{
		tmp = -tmp;
		putchar('-');
	}
	long long s = 0;
	while (tmp > 0)
	{
		f[s++] = tmp % 10 + '0';
		tmp /= 10;
	}
	while (s > 0)
	{
		putchar(f[--s]);
	}
}

const long long maxN = 100090;
long long totN;
long long X[maxN << 1];
long long totT;
long long totANS;
struct Line
{
	long long l, r, h;
	long long mark;
} lines[maxN << 1];
bool operator<(Line a, Line b)
{
	return a.h < b.h;
}
struct Node
{
	Node *lch, *rch;
	long long l, r, sum;
	long long len;

	// Node(long long L, long long R)
	// {
	// 	l = L;
	// 	r = R;
	// 	len = 0;
	// 	sum = 0;
	// 	if (L == R)
	// 		return;
	// 	long long Mid = (l + r) >> 1;
	// 	lch = new Node(L, Mid);
	// 	rch = new Node(Mid + 1, R);
	// }

	void push_up()
	{
		if (sum)
		{
			len = X[r + 1] - X[l];
		}
		else
		{
			len = lch->len + rch->len;
		}
	}

	void update(long long L, long long R, long long c)
	{
		if (X[l] >= R || X[r + 1] <= L)
		{
			return;
		}
		if (X[l] >= L && X[r + 1] <= R)
		{
			sum += c;
			push_up();
			return;
		}
		lch->update(L, R, c);
		rch->update(L, R, c);
		push_up();
	}
};
Node Mem[(maxN << 1) + 20];
Node *nowMEM = Mem;

Node *New(long long L, long long R)
{
	Node *anewd = ++nowMEM;
	anewd->l = L;
	anewd->r = R;
	anewd->len = 0;
	anewd->sum = 0;
	if (L == R)
	{
		return anewd;
	}
	long long Mid = (L + R) >> 1;
	anewd->lch = New(L, Mid);
	anewd->rch = New(Mid + 1, R);
    return anewd;
}

int main()
{
	totN = read();
	for (int i = 1, Xa, Ya, Xb, Yb; i <= totN; i++)
	{
		Xa = read();
		Ya = read();
		Xb = read();
		Yb = read();
		X[2 * i - 1] = Xa;
		X[2 * i] = Xb;
		lines[2 * i - 1] = {Xa, Xb, Ya, 1};
		lines[2 * i] = {Xa, Xb, Yb, -1};
	}
	totN <<= 1;
	sort(lines + 1, lines + totN + 1);
	sort(X + 1, X + totN + 1);
	totT = unique(X + 1, X + totN + 1) - (X + 1);
	Node *rot = New(1, totT - 1);
	for (int i = 1; i < totN; i++)
	{
		rot->update(lines[i].l, lines[i].r, lines[i].mark);
		totANS += rot->len * (lines[i + 1].h - lines[i].h);
	}
	write(totANS);
	return 0;
} //Thomitics Code

本地环境:

                   -`                 
                  .o+`                 thomitics@Thomitics-Arch
                 `ooo/                 OS: Arch Linux 
                `+oooo:                Kernel: x86_64 Linux 5.12.13-arch1-2
               `+oooooo:               Uptime: 56m
               -+oooooo+:              Packages: 1313
             `/:-:++oooo+:             Shell: zsh 5.8
            `/++++/+++++++:            Resolution: 1600x900
           `/++++++++++++++:           DE: KDE 5.83.0 / Plasma 5.22.2
          `/+++ooooooooooooo/`         WM: KWin
         ./ooosssso++osssssso+`        GTK Theme: Breeze [GTK2/3]
        .oossssso-````/ossssss+`       Icon Theme: Win10Sur-dark
       -osssssso.      :ssssssso.      Disk: 22G / 102G (22%)
      :osssssss/        osssso+++.     CPU: Intel Core i5-4590S @ 4x 3.7GHz [62.0°C]
     /ossssssss/        +ssssooo/-     GPU: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
   `/ossssso+/:-        -:/+osssso+-   RAM: 3961659392-
  `+sso+:-`                 `.-/+oso: 
 `++:.                           `-/+/
 .`                                 `/

2021/6/28 14:46
加载中...