有時候,要透過題面看到本質
題意 你的老闆命令你將停車場裡的車移動成他想要的樣子。
停車場是乙個長條矩形,寬度為w。我們以其左下角頂點為原點,座標軸平行於矩形的邊,建立直角座標系。停車場很長,我們可以認為它一直向右邊伸展到無窮遠處。
車都是邊平行於座標軸的矩形,大小可能不同。你可以將車任意地平移(但不能旋轉),只要他們不超出停車場的邊界,且不能互相碰撞,但緊挨著是允許的(即任意時刻任兩輛車的重疊面積為0)。
你知道目前各輛車的擺放位置,以及老闆心中所想的位置。你需要判斷是否可以辦到老闆的任務。
乍一看覺得毫無地方可以下手,仔細一想會貪心的想到去乙個個排列,但也覺得不太好做,但是事實上一輛汽車的移動我們可以用三個條件來描述,他的起始點s,他的終點e,他的寬度w,如果有兩輛車滿足 s1 < s2 && e1 > e2 && w1 + w2 > w的時候,就是否定情況,否則位肯定情況。因為在這種情況下的兩輛車必定需要併排交錯。
這就成了乙個三維問題,考慮用排序+樹狀陣列維護字首最大值解決即可,注意加乙個離散化。
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define for(i, x, y) for(int i=x;i<=y;i++)
#define _for(i, x, y) for(int i=x;i>=y;i--)
#define mem(f, x) memset(f,x,sizeof(f))
#define sca(x) scanf("%d", &x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x);
#define pri(x) printf("%d\n", x)
#define prl(x) printf("%lld\n",x);
#define clr(u) for(int i=0;i<=n;i++)u[i].clear();
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pii pair#define pil pair#define pll pair#define pb push_back
#define fi first
#define se second typedef vector
vi;const
double eps = 1e-9
;const
int maxn = 5e4 + 10
;const
int inf = 0x3f3f3f3f
;const
int mod = 1e9 + 7
; int
n,m,k,w;
inttree[maxn];
struct
points[maxn],e[maxn];
struct
carcar[maxn];
inthash[maxn];
int lowbit(int
t)void add(int x,int
t)int getmax(int
t)bool
cmp(car a,car b)
intmain()
for(i,
1,n)
sort(hash + 1,hash + 1 +n);
int cnt = unique(hash + 1,hash + 1 + n) - hash - 1
; for(i,
1,n) car[i].s = lower_bound(hash + 1,hash + 1 + cnt,car[i].s) -hash;
sort(car + 1,car + 1 +n,cmp);
bool flag = 1
; for(i,
1,n)
if(flag) puts("
tak"
);
else puts("
nie"
); }
#ifdef vscode
system(
"pause");
#endif
return0;
}
bzoj1246(樹狀陣列)
樹狀陣列的靈活運用,維護的是最大值,因為整個陣列就是乙個字首最大值,所以可以用實現,求乙個字首最大值,和更新pos之後的最大值。很好的運用,多回顧思考 include include include include includeusing namespace std const int n 200...
bzoj 2762 樹狀陣列
題意 給出一些形如 ax b 1 新加入乙個不等式 2 刪除乙個不等式 3 詢問當x k時滿足的不等式的個數 對於每乙個不等式,通過變形就可以得到使它成立的x的範圍 那麼就變成區間修改,單點查詢,樹狀陣列維護就好 注意 1 討論a 0 a 0 a 0的情況 2 由於k有非正數,所以要加上10 6 1...
bzoj 1935(樹狀陣列)
傳送門 題解 由於是靜態問題所以可以離線處理,所有點 詢問拆成4個 按x排序,二維可以轉成一維,相當於每次query到的就是當前已插入的點,而只有這些點能對query的返回值造成貢獻。p.s.對於x座標相同的插入 詢問,要考慮這幾個操作的先後順序 include using namespace st...