給出乙個長度為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...