HDU_5532_Almost Sorted Array

来源:http://www.cnblogs.com/edward108/archive/2017/10/08/7636922.html
-Advertisement-
Play Games

Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 6019 Accepted Submission(s) ...


Almost Sorted Array

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 6019    Accepted Submission(s): 1446


Problem Description We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, selection sort, bubble sort, etc. But sometimes it is an overkill to use these algorithms for an almost sorted array.

We say an array is sorted if its elements are in non-decreasing order or non-increasing order. We say an array is almost sorted if we can remove exactly one element from it, and the remaining array is sorted. Now you are given an array a1,a2,,an, is it almost sorted?  

 

Input The first line contains an integer T indicating the total number of test cases. Each test case starts with an integer n in one line, then one line with n integers a1,a2,,an.

1T2000
2n105
1ai105
There are at most 20 test cases with n>1000.
 

 

Output For each test case, please output "`YES`" if it is almost sorted. Otherwise, output "`NO`" (both without quotes).  

 

Sample Input 3 3 2 1 7 3 3 2 1 5 3 1 4 1 5  

 

Sample Output YES YES NO  

 

Source 2015ACM/ICPC亞洲區長春站-重現賽(感謝東北師大)  
  • 要求是去掉一個元素使得新數列為非嚴格單調數列
  • 那就正逆跑一遍nlogn的LIS,把判定里的小於號改成小於等於號就可以做到對於非嚴格單調的要求
  • 然後原來演算法裡面的lower_bound改成upper_bound就行了

 

 

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <cmath>
 8 #include <vector>
 9 #include <queue>
10 #include <stack>
11 #include <set>
12 #include <map>
13 using namespace std;
14 typedef long long           LL ;
15 typedef unsigned long long ULL ;
16 const int    maxn = 1e5 + 10   ;
17 const int    inf  = 0x3f3f3f3f ;
18 const int    npos = -1         ;
19 const int    mod  = 1e9 + 7    ;
20 const int    mxx  = 100 + 5    ;
21 const double eps  = 1e-6       ;
22 const double PI   = acos(-1.0) ;
23 
24 int T, n, ans;
25 int a[maxn], c[maxn];
26 int main(){
27     // freopen("in.txt","r",stdin);
28     // freopen("out.txt","w",stdout);
29     while(~scanf("%d",&T)){
30         while(T--){
31             ans=1;
32             scanf("%d",&n);
33             scanf("%d",&a[1]);
34             c[0]=a[1];
35             for(int i=2;i<=n;i++){
36                 scanf("%d",&a[i]);
37                 if(a[i]>=c[ans-1]){
38                     c[ans++]=a[i];
39                 }else{
40                     c[upper_bound(c,c+ans,a[i])-c]=a[i];
41                 }
42             }
43             if(n-ans==1 || n==ans){
44                 puts("YES");
45             }else{
46                 ans=1;
47                 c[0]=a[n];
48                 for(int i=n-1;i>0;i--)
49                     if(a[i]>=c[ans-1]){
50                         c[ans++]=a[i];
51                     }else{
52                         c[upper_bound(c,c+ans,a[i])-c]=a[i];
53                     }
54                 if(n-ans==1 || n==ans)
55                     puts("YES");
56                 else
57                     puts("NO");
58             }
59         }
60     }
61     return 0;
62 }

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作系統筆記 1、批處理、分時、實時是操作系統的三種基本類型 2、分散式系統是由若幹個電腦經互連網路連接而成的,這些電腦既可以獨立工作,又能協同工作。可實現系統內的資源管理,任務動態分配,並能並行地運行分散式程式。分散式系統是網路操作系統的更高級的形式並保持了網路操作系統的全部功能。 3、核心態 ...
  • 一、系統啟動流程 一般來說,Linux 系統的啟動流程是這樣的: 1. 開機之後,位於電腦主板 ROM 晶元上的 BIOS 被最先讀取,在進行硬體和記憶體的校驗以及 CPU 的自檢沒有異常後, BIOS 將被載入到記憶體中。 2. BIOS 按照其存儲的啟動順序,依次嘗試載入含有 MBR 信息的可啟動 ...
  • 目前本人接觸過兩種模板導出的方式:(1)C#利用NPOI介面製作Excel模板,在服務端用數據渲染模板(2)在前端利用前人搭建好的框架,利用office編寫xml製作模板,在客戶端進行數據的渲染,導出的格式是word。在製作報表時兩種方式都可以滿足的基本需求,但excel模板更加強大,因為xml模板 ...
  • 首先我們知道了HTML和css用途,那麼今天就來看看HTML的一部分功能和用途。 簡單的說HTML就是靈活使用標簽,標簽就相當於一個網頁的骨架,有了這個骨架才能使網頁更能區域色彩化。 首先來說HTML術語 1.HTML文檔由許多個元素組成,所有的內容都是靠元素組織到頁面中。 2.元素的組成部分,簡單 ...
  • 寫在前面整個項目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp這一節內容可能會用到的庫文件有 Measurement 和 TestCase,同樣在 Github 上可以找到。善用 Ctrl + F... ...
  • 感覺又幫 Windows 10 IoT 開荒了,所以呢,正兒八經的寫篇博客吧。其實大概半年前就想寫的,那時候想做個基於 Windows 10 IoT 的小車,但樹莓派原生不支持 PWM 啊。百度也搜不到,上 GitHub 轉了一圈,在 @ms-iot 那發現了 Lightning ,再看最後的更新時 ...
  • 最近項目中需要一個導出Excel報告的功能,假期搜了一下,把其中比較主流的列一下,僅供參考。 功能需求: 效果圖: 一、ClosedXML 主頁:https://github.com/ClosedXML/ClosedXML 需要引用OpenXMLSDK(DocumentFormat.OpenXml. ...
  • <!ATTLIST 元素名 屬性名稱 屬性類型 屬性特點> 1.屬性類型 屬性值引用已定義的id值,複數形式可以應用多個id, 以空格隔開 (1)CDATA e.g (2) ID類型 (3)IDREF,IDREFS (4)enumerated枚舉類型 2.屬性特點 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...