這算是一道比較綜合的思路題吧,考場上只想出了後半部分的貪心
考慮如果我們已經求出了一種可**況,那麼其他的答案不過只有三種:
1.上公升序列給乙個給下降序列
2.下降序列給乙個給上公升序列
3.兩個序列交換乙個元素
因為如果超過乙個元素的操作,就會在另一種裡面形成不合法的情況
接下來只需要求出乙個可行解即可o(n)求答案了
如果兩個序列已經相交過了,就已經互不影響了
否則如果新加入的乙個值不在兩個序列末尾值的中間時,就可以貪心決定,讓它們直接相交了
否則考慮下乙個元素,如果是上公升的,這乙個給上公升序列更優,反之亦然,亦證
然後就可以做出來了(話說我今天t1 int+int>int 直接爆零了 qwq)
不太想寫就貼乙個爆搜吧,也就只有今天老師懶得出資料直接隨機才能過了
已知可以卡到至少n^2的複雜度呢
#includeusing namespace std;
const int n=500010;
const int mod=1e9+7;
int a[n];
int t,n,ans;
int dfs(int cur,int las,bool kind)
}int dd[n],tot;
int main()
tot=0;
for(int i=1;i<=n;i++)
sort(dd+1,dd+1+tot);
for(int i=1;i<=n;i++)a[i]=lower_bound(dd+1,dd+1+tot,a[i])-dd;
int ans=dfs(1,0,0)+dfs(1,tot+1,1);ans%=mod;
printf("%d\n",ans);
} return 0;
}
BJ80中 連續區間查詢
給出乙個1到n的排列,定義乙個區間是連續的區間當且僅當這個區間的值域也是個區間。例如 1,3,2 是連續區間,但是 1,3 並不是。再給出m次詢問,每次詢問乙個區間 l,r 需要求的是包含這個區間的長度最小的區間。如果有多個,請輸出左端點最小的那乙個。第一行乙個整數n,表示排列長度。接下來一行n個整...
Test 2018 07 23 二中集訓
原題 codevs 3147 矩陣乘法2 rightarrow 戳我進codevs原題 給出兩個 n n 的矩陣,m 次詢問它們的積中給定子矩陣的數值和。第一行兩個正整數 n,m 接下來 n 行,每行 n 個非負整數,表示第乙個矩陣。接下來 n 行,每行 n 個非負整數,表示第二個矩陣。接下來 m ...