杭電多校第六場 snowy white

2021-09-26 01:45:50 字數 2169 閱讀 9137

首先將縱座標離散化。 將所有點按照橫座標排序,列舉矩形的上邊界,然後往後依次加入每個點,這樣就確定了 矩形的上下邊界。設 v[y] 表示矩形內部縱座標為 y 的點的權值和,則答案為 v 的最大子段和, 用線段樹維護帶修改的最大子段和即可。 時間複雜度 o(nlogn)。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define ll long long

#define inf 0x3f3f3f3f

#define linf 0x3f3f3f3f3f3f3f3f

#define ull unsigned long long

#define endl '\n'

#define clr_0(a) memset(a, 0, sizeof(a))

#define clr_inf(a) memset(a, inf, sizeof(a))

#define lowbit(x) x & -x

#define lson rt << 1, l, mid

#define rson rt << 1 | 1, mid + 1, r

#define pb push_back

#define pop pop_back

const

double pi =

acos(-

1);const

int maxn =

2000+10

;const

int maxm =

(maxn<<5)

+5;const ll mod =

998244353

;const

int hash_mod =

19260817

;int t, n, cnt_b;

ll suml[maxn<<2]

, sumr[maxn<<2]

, sum[maxn<<2]

, mx[maxn<<2]

;int b[maxn]

;struct node

}p[maxn]

;void

pushup

(int rt)

void

build

(int rt,

int l,

int r)

void

update

(int rt,

int l,

int r,

int x,

int val)

int mid =

(l + r)

>>1;

if(x <= mid)

update

(lson, x, val);if

(x > mid)

update

(rson, x, val)

;pushup

(rt);}

intmain()

sort

(b +

1, b +

1+ cnt_b)

;int m =

unique

(b +

1, b +

1+ cnt_b)

- b -1;

sort

(p +

1, p +

1+ n)

; ll ans =

-1e18

;for

(int i =

1; i <= n ;

++ i) p[i]

.y =

lower_bound

(b +

1, b +

1+ m, p[i]

.y)- b;

for(

int i =

1; i <= n ;

++ i)

} cout << ans << endl;

}return0;

}

杭電多校第六場(IF)

題意 有命題 將 b 進製數y按位相加,迴圈無窮次,最終結果若 x 0,則有y x 0,反之不然 給出b和x,判斷命題是否成立 打表發現的b x 1時成立,看到有數論大佬推出來的 想看推導的右轉 includeusing namespace std typedef unsigned long lon...

20190807杭電多校第六場

賽中和隊友一直在搞乙個胡搞做法,艱難優化到本地跑10s,可惜始終過不了。最後只好補了題解做法。倒著刪除,用樹狀陣列求lis,維護一條當前的lis的路徑。若被刪除的數不在當前的lis中,則答案不變 否則,重新做一遍lis。據說因為lis的期望長度為sqrt n 所以被選中的概率是 ac include...

2019 杭電多校(第六場)

1005 snowy smile 線段樹 題意給你n個點 讓你畫個矩形 使矩形內所含點的權值和最大 必須有點 思路離散化 列舉矩形的左右區間 線段樹維護y座標的最大欄位和 複雜度 o n n lgn include using namespace std typedef long long ll c...