考虑每次新放一个棋子会产生多少新的矩形,以及减掉多少旧的矩形. 用第$i$个点的坐标把坐标轴分成4个象限. 显然第一问的答案用四个单调栈就能解决. 而且第二问每个矩形的两个端点一定在1,3或2,4象限的单调栈里. 枚举第一象限里的一个点,剩下三个象限里维护3个指针,就能找出来第3象限里能和当前点组成矩形的点. 二四象限同理. #include<bits/stdc++.h> #define N 5005 #define ll long long using namespace std; int…
n只有2000,直接DFS就可以过了... -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cctype> #define rep( i, n ) for( int i = 0;…