求帮卡常!
查看原帖
求帮卡常!
541382
BelowHorizon楼主2021/10/28 20:12

O(20002log106)O(2000^2\log 10^6) 的线段树“优秀”写法。

谢谢各位巨佬!

#pragma GCC diagnostic error "-std=c++11"
#pragma GCC target("avx")
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5,INF = 1e6 + 1;

struct Tree {
	int Max,l,r;
}t[INF << 2];
struct bad_light {
	int x,y;
	bool operator < (const bad_light &A) const {
		return x < A.x;
	}
}a[N],b[N];
int Max[N];
void build (int p,int l,int r) {
	t[p].l = l,t[p].r = r;
	if (l == r) {
		return ;
	}
	int mid = l + r >> 1;
	build (p << 1,l,mid);
	build (p << 1 | 1,mid + 1,r);
}
void modify (int p,int l,int r,int w) {
	if (t[p].l >= l && t[p].r <= r) {
		t[p].Max = max (t[p].Max,w);
		return ;
	}
	int mid = t[p].l + t[p].r >> 1;
	if (l <= mid) modify (p << 1,l,r,w);
	if (r > mid) modify (p << 1 | 1,l,r,w);	 
}
int query (int p,int pos) {
	if (t[p].l == t[p].r) {
		return t[p].Max;
	}
	int mid = t[p].l + t[p].r >> 1;
	if (pos <= mid) return max (t[p].Max,query (p << 1,pos));
	else return max (t[p].Max,query (p << 1 | 1,pos));
}
int main () {
	int n,m; cin >> n >> m;
	for (int i = 1;i <= n;i ++) {
		cin >> a[i].x >> a[i].y;
	}
	for (int i = 1;i <= m;i ++) {
		cin >> b[i].x >> b[i].y;
	}
	sort (b + 1,b + 1 + m);
	for (int i = m;i >= 1;i --) {
		Max[i] = max (Max[i + 1],b[i].y); 
	}
	build (1,0,INF);
	for (int i = 1;i <= n;i ++) {
		int lst = 0;
		for (int j = 1;j <= m;j ++) {
			if (a[i].x > b[j].x) continue;
			int tmp_x = b[j].x - a[i].x + 1;
			modify (1,lst,tmp_x - 1,Max[j] - a[i].y + 1);
			lst = tmp_x;
		}
		modify (1,lst,INF,0);
	}
	int Min = 2 * INF;
	for (int i = 0;i <= INF;i ++) {
		Min = min (Min,i + query (1,i));
	}
	cout << Min << endl; 
	return 0;
}
2021/10/28 20:12
加载中...