<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      papamelon 328. 電路板 Bridging signals(挑戰程序設計競賽)

      地址 https://www.papamelon.com/problem/328


      解答
      以6個接口為例
      左端 1 2 3 4 5 6端口對應
      右端 4 2 6 3 1 5 端口
      如圖 左1連接的是右5 如果選擇這條接線
      那么左端其他接口就不能連接右端5以前的接口了,否則就會接線交叉。

      按照這個規則,其實我們就是求解。
      為了接線不交叉的情況下接入更多的接口, 等同于查找左端可以連接右端接口數字的最長上升子序列

      于是有了solve1的代碼,但是時間復雜度是O(n^2),n=40000,結果大大超出10^8,肯定TLE了
      

      于是采用單調隊列優化,dp[i]表示當前獲得的長度為i的最長上升子序列的結尾元素。
      每次加入元素時檢查dp數組,若dp數組尾端小于元素,元素直接加入dp數組尾端,否則的話則查找dp數組中第一個大于待加入元素的位置,新元素替換進去;最后dp數組的長度
      就是最長上升子序列長度;

      因為dp數組內的元素單調,所以可以二分查找,整體復雜u度O(n*logn)
      代碼見solve2
      
      #include <iostream>
      #include <memory.h>
      #include <algorithm>
      
      using namespace std;
      
      const int N = 40010;
      
      int A[N];
      int dp[N];
      int t, n;
      
      void solve1() {
      
      	cin >> t;
      	while (t--) {
      		memset(A, 0, sizeof A);
      		memset(dp, 0, sizeof dp);
      		cin >> n;
      
      		for (int i = 1; i <= n; i++) {
      			cin >> A[i];
      		}
      		int ans = 0;
      		for (int i = 1; i <= n; i++) {
      			for (int j = i - 1; j >= 0; j--) {
      				if (A[i] > A[j]) {
      					dp[i] = max(dp[i], dp[j] + 1);
      				}
      			}
      			ans = max(ans, dp[i]);
      		}
      		cout << ans << endl;
      	}
      
      
      	return ;
      }
      
      
      
      /*
      O(n^2) tle  進行優化
      O(nlogn)
      每次加入元素時檢查棧頂,若棧頂小于元素,直接加入,否則的話則查找棧中第一個大于待加入元素的元素,換掉它;最后棧的容量就是長度;
      因為棧內的元素單調,所以可以二分查找,O(logn)O(logn)替換O(n)O(n)達到優化;
      */
      
      int bsearch(int target, int len) {
      	int l = 1; int r = len;
      	while (l < r) {
      		int mid = (l + r) >> 1;
      		if (dp[mid]>=target) r = mid;
      		else  l = mid + 1;
      	}
      
      	return l;
      }
      
      void solve2() {
      	cin >> t;
      	while (t--) {
      		memset(A, 0, sizeof A);
      		memset(dp, 0, sizeof dp);
      		cin >> n;
      
      		for (int i = 1; i <= n; i++) {
      			cin >> A[i];
      		}
      		int idx = 1; dp[idx] = A[idx];
      		for (int i = 2; i <= n; i++) {
      			if (A[i] > dp[idx]) {
      				dp[idx + 1] = A[i]; idx++;
      			}
      			else {
      				int pos = bsearch(A[i],idx);
      				dp[pos] = A[i];
      			}
      		}
      
      		cout << idx << endl;
      	}
      
      	return ;
      }
      
      int main()
      {
      	//solve1(); //tle
      	solve2();
      
      	return 0;
      }
      
      

      我的視頻題解空間

      posted on 2021-12-02 11:03  itdef  閱讀(56)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 四虎国产精品永久在线看| 亚洲av成人无码精品电影在线| 四虎永久在线精品8848a| 中文字幕在线国产精品| 国产成人片无码视频在线观看| 国产精品久久久久久福利69堂| 日韩免费码中文在线观看| 成人午夜av在线播放| 免费A级毛片樱桃视频| 久久国产乱子精品免费女| 日韩欧美亚洲综合久久| 亚洲熟妇熟女久久精品综合 | 亚洲精品国产自在久久| 国产成人精品一区二三区| 中文字幕av国产精品| 日韩精品无码一区二区视频 | 欧美福利电影A在线播放| 国产精品久久久福利| aa性欧美老妇人牲交免费| 色综合天天综合网天天看片| 久久精品国产亚洲av天海翼| 亚洲最大成人免费av| 亚洲色成人网站www永久四虎| 99re在线视频观看| 免费黄色大全一区二区三区| 国产又色又爽又黄的免费软件| 日韩精品亚洲不卡一区二区| 福利一区二区在线观看| 十八禁午夜福利免费网站| 中文有码字幕日本第一页| 人人爽人人爽人人片av东京热 | 原平市| 亚州中文字幕一区二区| 国产jizzjizz视频| 亚洲中文字幕乱码电影| 97久久精品午夜一区二区| 男人下部进女人下部视频| 99午夜精品亚洲一区二区| 日韩中文字幕人妻一区| 久久五十路丰满熟女中出| 免费观看激色视频网站|