BJ80中集訓 多執行緒

2021-09-05 11:04:04 字數 1298 閱讀 4963

這算是一道比較綜合的思路題吧,考場上只想出了後半部分的貪心

考慮如果我們已經求出了一種可**況,那麼其他的答案不過只有三種:

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 ...