評測
題目描述同上題。
其中n<=300000。
很明顯,需要用dp而且要用nlogn複雜度的方法求子序列。
舉例用nlogn的做法求最長上公升子串行:
首先需要乙個low陣列,low[i]表示長度為i的子串行最小的末尾(因為當以兩個數為終點的上公升子串行,終
點越小越優),所以,當輸入乙個數時,如果low[len]< x,直接插入到末尾,否則,在low中找乙個比它大或等於它的第乙個數,替換。
#include
#include
#include
#define ll long long
#define m 2147483647
using
namespace
std;
int n,a[300005],len;
int up[300005];//up[i]記的是長度為i的的不上公升子串行的最大末位
int low[300005];//low[i]記的是長度為i的上公升子串行最小末位
int search(int l,int r,int z)//在up中找乙個比z小最大的
return l;
}/*int search2(int l,int r,int z)//在low中找乙個比z大最小的
}printf("%d\n",len);
len=0;
low[++len]=a[1];
for(int i=2;i<=n;i++)
}printf("%d",len);
return
0;
}
寫乙個對的二分好難! 洛谷 P2757 飛彈的召喚 資料加強
題目背景 易琢然今天玩使命召喚,被敵軍用空對地飛彈轟炸,很不爽 眾所周知,易琢然很不老實,他開了外掛程式 外掛程式第一次可以打掉任意高度的飛彈,之後每一次都不能打掉大於上一次高度的飛彈 但易琢然水平太差,敵軍最多有300000顆飛彈,飛彈只能按順序打,因為外掛程式有bug,而且是超音速飛彈,只有一秒...
洛谷P2757 國家集訓隊 等差子串行
題意簡化就是找到a i a j a k 成乙個len 3的等差數列,且a j a i a k a j 那麼列舉a j 為方便從左到右列舉,設數字x在j左邊為1,在右邊為0 那麼可以用樹狀陣列維護乙個hash值,如果a j d和a j d在不同邊也就是乙個是0乙個是1,那麼就存在一組等差序列了 也就是...
P1028 數的計算
我們要求找出具有下列性質數的個數 包含輸入的自然數 nn 先輸入乙個自然數 nn n le 1000n 1000 然後對此自然數按照如下方法進行處理 不作任何處理 在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 加上數後,繼續按此規則進行處理,直到不能再加自然數為止.輸入格式 11 個自然數...