題目鏈結
題意:給定乙個長度為
n<=105
的序列 求刪去連續長度為
0<=
l<=
n
的序列後的li
s
思路:
假設你已經會o(
nlog
n)的l
is, 刪去
i
前面連續一段長度為
l 即[
i−l,
i-1]
的 序列, 左邊是i−
l−1
, 右邊是
i
, 求剩下的li
s
首先預處理出: f[
i]:=以
a[i]
結尾的l
is的最
大長度 g[
i]:=以
a[i]
開頭的l
is的最
大長度
我們可以根據
i
, 找到 [0
,i−l
−1]
之間的乙個值
其值小於a[
i], 而其f[
i]值是最大的, 也就是o(
n2)
求lis的思想
關鍵是如何快速確定在[0
,i−l
−1]
中, 找到這個值
我們利用線段樹和離散化, 將a[
i]對映到線段樹上 假設i
位置對應的值是
x
,並且其對映到線段樹上對應的下標是
y [0
,y−1
]
之間的最大值ma
xvma
xv[i
]=ma
x
其實就是dp
[i]:=
以a[i]
結尾, 刪去[i
−l,i
−1] 長度為
l 的li
s 的最大長度dp
[i]=
maxv
[i]+
g[i]
,ans
=max
注意:普通的lis演算法只能求得區間內的lis但不能保證畢包含頭或尾,
這裡利用lower_bound函式在nlogn的時間求任意字首且包含字首尾的lis ( 即f[ i ] )。
同樣利用該函式求得任意字尾且包含字尾頭的lis ( 即g[ i ] )。
#pragma comment(linker, "/stack:102400000,102400000")
#include#include#include#include #include#include#include#include#include#include#include#includeusing namespace std;
#define eps 1e-8
#define pii pair#define inf 0x3f3f3f3f
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define ll long long int
#define mod 1000003
#define maxn 110000
#define maxm 10001005
int mi(int a,int b)
int n,t,l,ans;
int a[maxn],aa[maxn];
int f[maxn],g[maxn],h[maxn];
int mx[maxn*4];
void update(int rt,int x,int v,int l,int r)
int mid=(l+r)>>1;
if(mid>=x) update(rt*2,x,v,l,mid);
else update(rt*2+1,x,v,mid+1,r);
mx[rt]=ma(mx[rt*2],mx[rt*2+1]);
}int query(int rt,int lx,int rx,int l,int r)
}int main()
sort(aa+1,aa+1+n);
int nn=unique(aa+1,aa+1+n)-aa-1;
memset(h,0x3f,sizeof h);
for(int i=1;i<=n;i++)
memset(h,0x3f,sizeof h);
for(int i=n;i>=1;i--)
a[0]=f[0]=g[n+1]=0; a[n+1]=0x3f3f3f3f;
memset(mx,0,sizeof mx);
ans=0;
for(int i=l+1;i<=n+1;i++)
printf("case #%d: %d\n",++tt,ans);
}return 0;
}
2019網路賽總結
今年的網路賽,包括從一開始的ccpc到昨天結束了的icpc,總的來說發揮是很差的,補了一暑假的圖論知識基本上是一次都沒有用到,非常的難受,說說我們不足的地方吧,首先,從一開始我就感覺出來了,我們隊伍的整體的氛圍是很差的,這個氛圍是指我們隊伍內討論的情況,就像是各打個的,乙個題目下來了基本上沒有什麼討...
HDU5878 HDU5891 2016網路賽青島
a 題意 給出乙個整數n 找出乙個大於等於n 的最小整數m 使得m的質因數只有2 3 5 7 分析 預處理出質因數2 3 5 7的數,超過maxt就行,然後找 b 題意 求1 1 2 1 2 2 1 n 2 分析 題坑,意思是n很大 感覺上越到後來值越小,實際上這個是趨向 2 6,於是小範圍的n直接...
學軍11 29網路賽 題解 總結
題面 前一小時被迫打oi賽制。後面自身心情原因打acm賽制。a太過毒瘤,在3h多才切。d暴力題噁心死人。切abc。後面兩題甚至沒有心情打部分分,所以在切了a之後我的比賽已經結束了。300分整個機房最後一名 另外三位440,還有一位500拿rank1 一開始就想到做到後面有迴圈節並且迴圈節是2。但是在...