洛谷扫描线模板
求 n 个矩形的面积并。
第一行输入一个整数n,随后的n行依次输入x1,y1,x2,y2, (x1,y1),(x2,y2)分别代表矩形的左下角坐标和右上角坐标。
输入格式:
2
100 100 200 200
150 150 250 255
输出格式:
18000
说明:
1≤n≤10000,
0≤x1<x2≤1e9,
0≤y1<y2≤1e9.
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10;
int n, m;
struct Segment{
int x, y1, y2;
int k;
}seg[N << 1];
struct Node{
int l, r;
int cnt;
int len;
}tr[N << 3];
vector<int> ys;
bool cmp(Segment &a, Segment &b){
return a.x < b.x;
}
int find(int y){
return lower_bound(ys.begin(), ys.end(), y) - ys.begin();
}
void pushup(int u){
if(tr[u].cnt) tr[u].len = ys[tr[u].r + 1] - ys[tr[u].l];
else if(tr[u].l != tr[u].r){
tr[u].len = tr[u << 1].len + tr[u << 1 | 1].len;
}
else tr[u].len = 0;
}
void build(int u, int l, int r){
tr[u].l = l, tr[u].r = r;
if(l == r) return ;
int mid = l + r >> 1;
build(u << 1, l, mid); build(u << 1 | 1, mid + 1, r);
}
void modify(int u, int l, int r, int k){
if(tr[u].l >= l && tr[u].r <= r){
tr[u].cnt += k;
pushup(u);
}
else{
int mid = tr[u].l + tr[u].r >> 1;
if(l <= mid) modify(u << 1, l, r, k);
if(r > mid) modify(u << 1 | 1, l, r, k);
pushup(u);
}
}
signed main(void){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i = 0, j = 0; i < n; i++){
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
seg[j ++] = {x1, y1, y2, 1};
seg[j ++] = {x2, y1, y2, -1};
ys.push_back(y1), ys.push_back(y2);
}
sort(ys.begin(), ys.end());
ys.erase(unique(ys.begin(), ys.end()), ys.end());
build(1, 0, ys.size() - 2);
sort(seg, seg + n * 2, cmp);
int res = 0;
for(int i = 0; i < n * 2; i++){
if(i > 0) res += tr[1].len * (seg[i].x - seg[i - 1].x);
modify(1, find(seg[i].y1), find(seg[i].y2) - 1, seg[i].k);
}
cout << res << endl;
return 0;
}
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!