牛客練習賽69 E 字串 雜湊

2022-06-10 18:15:06 字數 1045 閱讀 7734

給出乙個長度為n排列p

規定乙個區間 [l,r] (l<=r) 是 fair 的,當且僅當區間中最小值等於 l 並且最大值等於 r

求 fair 區間的個數

我不會正解

首先把每乙個i值對映成\(base^i\)

遍歷一邊全排列

然後每次加上base[a[i]]減去base[i],求貢獻,如果[l,r]滿足條件,那麼這一段區間的add值為0,

有點口胡,建議自己多多理解

注意要寫mp[0]=1

ps:有大佬用隨機數異或+異或字首和是真的秀

#include#include#include#include#include#include#include#include#include#include#include#include#define fi first

#define se second

#define debug printf(" i am here\n");

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairpii;

const ll inf=0x3f3f3f3f3f3f3f3f;

const int maxn=1e6+5,inf=0x3f3f3f3f;

const ull mod=1e9+7;

const double eps=1e-10;

ull base[maxn];

int n,a[maxn];

unordered_mapmp;

signed main()

scanf("%d",&n);

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

ll ans=0;

mp[0]=1;

ull add=0;

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

printf("%lld\n",ans);

return 0;

}

牛客練習賽69E 子串 樹狀陣列

給出乙個n nn的排列,求有多少個區間 l,r l,r l,r 使得最大值是r rr,最小值是lll。首先對於乙個位置的值作為左端點和右端點都有一段合法區間 到左邊第乙個比他小的和右邊第乙個比他大的,當右端點時同理 可以用樹狀陣列預處理每個的合法區間 然後對於兩個點各作為左右端點需要滿足左端點在右端...

牛客練習賽 69

第一次打牛客直接。y1s1牛客的評測系統真的慢,搞得我不想交 題目鏈結 首先先對陣列a逆序貪心可得val i,j a1 a2 ai j val i,j a 1 a 2 dots a val i,j a 1 a 2 ai j 嘗試證明 分析可知我們最終會選擇i j i ji j個陣列a的數,貪心肯定每...

牛客練習賽69 B

題意 給定n nn個數,乙個x xx表示可以劃分成最多x xx個串,乙個y yy表示在乙個串中最多選擇y yy個數。最後求 i 1x j 1yv al i j sum x sum yval i,j i 1x j 1 y va l i,j v al i,j val i,j val i,j 為 將n n...