2019牛客國慶集訓派對day5E題

2021-09-27 19:37:37 字數 938 閱讀 4614

題意理解:

給出一組數字序列,求每次刪掉乙個數字之後序列的所有 f[i]^2的異或和,f[i]表示以i為結尾的lis長度。

題解:第一眼是直接lis暴力來做,不能用經典的lis做法來求,o(n^3)肯定會炸,然後想了想,可以用o(nlogn)二分貪心優化的lis來求 f 陣列,本來以為就這麼簡單,但是過不去,叉姐專門把帶log的給卡了,因此只能用o(n^2)的方法來做了。

這個題需要深刻理解lis的含義,只有知道dp陣列的意義才能想到o(n^2)的做法。

刪除第i個數,那麼對之前的數 f 值是沒有影響的,而在其之後的值有兩種情況:假設當前為f[j],那麼之後的可能為f[j]-1或者f[j];

1.當為f[j]的時候,表示j之前有乙個位置f[x]=f[j]-1而且a[x]2.當為f[j]-1的時候,表示j之前沒有這種位置。

然後我們可以維護乙個陣列dp[i],用來表示在f值為i時的最小a(即當前長度為 i 時最後的元素最小可以是多少)

之後我們刪除 i 的時候判斷一下是否對 j 的上公升子串行有影響。盡可能貪心地維護最小值,保證f[j]仍為f[j]的情況多。

#include#define ll long long

using namespace std;

const int maxn=5e3+7;

const int inf=0x3f3f3f3f;

int a[maxn];

int f[maxn];

int dp[maxn];

int b[maxn];

int main()

for(int i=1;i<=n;i++)

for(int j=i+1;j<=n;j++)

else

}printf("%d ",res);

}printf("\n");

} return 0;

}

2019牛客國慶集訓派對day1

雖然我國慶七天溜回家了,隊友還是督促我好好打比賽.畢竟現場賽也沒幾天了,好好練習哈 判斷矩陣是否存在子矩陣滿足 x 1 le x le x 2,y 1 le y le y 2 內全是1,其他地方為0。水題,暴力判斷一下即可。include includeusing namespace std cha...

2019牛客國慶集訓派對day3 H

題意 動態插入一維線段端點為 li ri l i,r i li r i 查詢給定引數 li ri l i,r i li r i 問有多少條線段可以覆蓋它。我看了一眼感覺cdq可以寫我就寫了2333,複雜度是在o n log 2n l og2n o n log 2n log 2n o n lo g2 ...

2019牛客國慶集訓派對day7A題

題目理解 給你n,m,a在1到n中,b在1到m中,求a b 2016正整數對的個數 mod 1e9 7 題解 叉姐賊喜歡出這種題,不過確實這種題很好,這題是2016湖南省賽的題目,還有兩個類似的2017年四川省賽的2017和2018年湘潭邀請賽的2018 這幾個題都很像,不過考察的知識點各不相同,叉...