[51Nod 1218] 最長遞增子序列 V2 (LIS)

傳送門

Description

數組A包含N個整數。設S為A的子序列且S中的元素是遞增的,則S為A的遞增子序列。如果S的長度是所有遞增子序列中最長的,則稱S為A的最長遞增子序列(LIS)。A的LIS可能有很多個。例如A為:1 3 2 0 4,1 3 4,1 2 4均為A的LIS。其中元素1和4一定會出現在LIS當中,元素2和3可能會出現在LIS當中,元素0一定不會出現在LIS當中。給出數組A,輸出哪些數可能出現在LIS中,哪些數一定出現在LIS中。輸出數字對應的下標,下標編號從1開始,編號為1 - N。例如:1 3 2 0 4,可能出現的元素為3和2,對應的下標為2和3。一定出現的元素為1和4,對應下標為1和5.

Input

第1行:1個數N,表示數組的長度。(1 <= N <= 50000)
第2 - N + 1行:每行1個數A[i],表示數組的元素(0 <= A[i] <= 10^9)

Output

第1行:可能出現在LIS中的數的下標,中間用空格分隔。(輸出的下標按照遞增排序)
第2行:一定會出現在LIS中的數的下標,中間用空格分隔。(輸出的下標按照遞增排序)

Sample Input

5
1
3
2
0
4

Sample Output

A:2 3
B:1 5

Solution

正的跑最長上升子序列,反的跑最長下降子序列
如果正反的dp值相加等于len+1(自己加了兩次)說明可能在LIS中
若dp值獨一無二且可能出現即為一定出現

Code

//By Menteur_Hxy
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin)),p1==p2?EOF:*p1++)
using namespace std;char buf[1<<21],*p1,*p2;
inline int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=50010;
int n,len;
bool vis1[N],vis2[N];
int a[N],s[N],f[N],g[N];
vector<int> V[N];int main() {n=read();F(i,1,n) a[i]=read();F(i,1,n) {if(s[len]<a[i]) s[++len]=a[i],f[i]=len;else {int tmp=lower_bound(s+1,s+1+len,a[i])-s;s[tmp]=a[i];f[i]=tmp;}}len=0;R(i,1,n) {if(s[len]<-a[i]||!len) s[++len]=-a[i],g[i]=len;//無腦取負qwqelse {int tmp=lower_bound(s+1,s+1+len,-a[i])-s;s[tmp]=-a[i];g[i]=tmp;}}F(i,1,n) {if(f[i]+g[i]==len+1) vis1[i]=1;if(vis1[i]) V[f[i]].push_back(i);}F(i,1,n) {int siz=V[i].size();if(siz==1) vis2[V[i][0]]=1;}// F(i,1,n) cout<<f[i]<<" ";cout<<endl;// F(i,1,n) cout<<g[i]<<" ";cout<<endl;putchar('A');putchar(':'); F(i,1,n) if(vis1[i]&&!vis2[i]) printf("%d ",i);putchar('\n');putchar('B');putchar(':'); F(i,1,n) if(vis2[i]) printf("%d ",i);return 0;
}

轉載于:https://www.cnblogs.com/Menteur-Hxy/p/9643281.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396857.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux如何全局搜索目錄,Linux 全目錄全文搜索

文件內容搜索1grep -r root /home/ray/dev/media/wyquery/*通過這種方法來尋找數據庫配置文件的目錄其他$ grep “被查找的字符串” 文件名例子&#xff1a;在當前目錄里第一級文件夾中尋找包含指定字符串的.in文件grep “thermcontact” */*.in從文件內容查找與正則表達式匹配…

mysql命令行導入和導出數據

首先打開命令窗口,輸入命令:mysql -h localhost -u selffabu -p 連接成功后,進行下面的操作 MySQL中導出CSV格式數據的SQL語句樣本如下&#xff1a; Sql代碼select * from test_info into outfile /tmp/test.csv fields terminated by , optionally enclosed by " esc…

Python 拷貝對象(深拷貝deepcopy與淺拷貝copy)

http://www.jb51.net/article/15714.htm 1. copy.copy 淺拷貝 只拷貝父對象&#xff0c;不會拷貝對象的內部的子對象。2. copy.deepcopy 深拷貝 拷貝對象及其子對象 一個很好的例子&#xff1a; 1 import copy2 a [1, 2, 3, 4, [a, b]] #原始對象3 4 b a #賦值&#xff0c…

7.組件連線(貝塞爾曲線)--從零起步實現基于Html5的WEB設計器Jquery插件(含源碼)...

上節講到如何創建組件&#xff0c;清除設計器視圖&#xff0c;以及設計視圖的持久化和恢復&#xff0c;本節將重點講如何實現組件間的連線&#xff0c;前面章節有提到為了方便從持久化文件中恢復&#xff0c;組件和連線是分別存放的&#xff1a;nodes和lines對象&#xff0c;兩…

linux bind命令,LINUX命令bind-系統管理-顯示或設置鍵盤按鍵與其相關的功能

bind命令 用于顯示和設置命令行的鍵盤序列綁定功能。通過這一命令&#xff0c;可以提高命令行中操作效率。您可以利用bind命令了解有哪些按鍵組合與其功能&#xff0c;也可以自行指定要用哪些按鍵組合。語法bind(選項)選項-d&#xff1a;顯示按鍵配置的內容&#xff1b;-f&…

定位排查工作流的計算結果數據量不符合預期的方法

近期有發現一些用戶在咨詢&#xff0c;為什么數據從數據源出來后&#xff0c;經過了一些計算&#xff0c;結果不符合預期了。最常見的是說&#xff0c;為什么我的數據在Mysql里有xx條&#xff0c;怎么到MaxCompute里算了下結果變了。因為這是兩個不同的系統&#xff0c;我們又沒…

canvas 插件_基于canvas的JavaScript 二維碼生成工具——QRCanvas

介紹在我們日常的開發中&#xff0c;特別是在現代的社會環境下&#xff0c;二維碼的應用可謂是豐富多彩&#xff0c;各種各樣讓人眼花繚亂的二維碼&#xff0c;可見二維碼已經滲透進我們生活的方方面面&#xff0c;也可以說目二維碼確確實實方便了我們的生活。因為作為開發人員…

spring cloud feign 上傳文件報not a type supported by this encoder解決方案

上傳文件調用外部服務報錯&#xff1a; not a type supported by this encoder 查看SpringFormEncoder類的源碼&#xff1a; 1 public class SpringFormEncoder extends FormEncoder2 {3 4 public SpringFormEncoder()5 {6 this(((Encoder) (new feign.codec.…

counter 計數器

包含了兩個屬性和一個方法&#xff1a; 1. counter-reset2. counter-increment3. counter()/counters()counter-reset&#xff08;主要作用就是給計數器起個名字。如果可能&#xff0c;順便告訴下從哪個數字開始計數。默認是0&#xff09;&#xff1a;.xxx { counter-reset: sm…

linux中的變量文件路徑,Linux庫文件和Shell可執行程序命令文件搜索路徑變量的設置...

一、庫文件的搜索路徑&#xff1a;1、在配置文件/etc/ld.so.conf中指定動態庫搜索路徑(需要添加其它庫文件的路徑&#xff0c;在文件的最后添加具體的路徑即可 [ 如&#xff1a;/usr/local/lib ]&#xff0c;添加后保存退出&#xff0c;然后在命令行ldconfig2、通過環境變量LD_…

消息隊列NetMQ 原理分析2-IO線程和完成端口

目錄 前言介紹目的IO線程初始化IO線程Proactor啟動Procator線程輪詢處理socketIOObject總結前言 介紹 [NetMQ](https://github.com/zeromq/netmq.git)是ZeroMQ的C#移植版本,它是對標準socket接口的擴展。它提供了一種異步消息隊列,多消息模式,消息過濾&#xff08;訂閱&#xf…

django——url(路由)配置

URL是Web服務的入口&#xff0c;用戶通過瀏覽器發送過來的任何請求&#xff0c;都是發送到一個指定的URL地址&#xff0c;然后被響應。 在Django項目中編寫路由&#xff0c;就是向外暴露我們接收哪些URL的請求&#xff0c;除此之外的任何URL都不被處理&#xff0c;也沒有返回。…

VC連接mysql數據庫錯誤:libmysql.lib : fatal error LNK1113: invalid machine 解決方法

VC連接MySQL的配置過程在上一篇博文中&#xff0c;不過當你設置好&#xff0c;以為萬事大吉的時候&#xff0c;運行卻出現這個錯誤&#xff1a;libmysql.lib : fatal error LNK1113: invalid machine type。 無效的機器類型&#xff0c;真的是很讓人捉急。 發生這個錯誤的原因是…

linux 內存泄漏 定位,一種內存泄露檢查和定位的方法

一個系統后臺服務進程&#xff0c;可能包括多個線程&#xff0c;在生成環境下要求系統程序能夠穩定長時間穩定運行而不宕機。其中一個基本的前提就是需要保證系統程序不存在內存泄露。那么&#xff0c;該如何判讀系統程序是否存在內存泄露呢&#xff1f;如果存在&#xff0c;又…

python怎么發送郵件_在Python如何使用SMTP發送郵件

SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則&#xff0c;由它來控制信件的中轉方式。 python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。 Python創建 SMTP…

統計單詞個數(劃分型)

codevs 1040 統計單詞個數 2001年NOIP全國聯賽提高組 題目等級 : 黃金 Gold題目描述 Description給出一個長度不超過200的由小寫英文字母組成的字母串(約定;該字串以每行20個字母的方式輸入&#xff0c;且保證每行一定為20個)。要求將此字母串分成k份(1<k<40)&#xff0c…

基于ASP.NET的新聞管理系統(三)代碼展示

5.1.1欄目部分 增加欄目&#xff08;addLanMu.aspx&#xff09;&#xff1a; <html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"> <title></title> <link rel"stylesheet" type"text/css" …

洛谷-求同構數的個數-NOIP2013提高組復賽

題目描述 Description 所謂同構數是指這樣的數&#xff0c;即它出現在它的平方數的右端。例如&#xff0c;5的平方是25 &#xff08;即5525&#xff09;&#xff0c;5是25右端的數&#xff0c;那么5就是同構數。又如&#xff0c;25的平方是625&#xff08;即2525625&#xff09…

plex linux 數據目錄,shareplex日常維護文檔

2017/07/25##SharePlex日常維護源(SRC)&#xff1a;192.168.1.101 db01目標(TGT):192.168.1.102 db02SRC:su - oraclesp_ctrlshowqstatusshow capture detailshow read detailshow log reverseshow config --查看當前使用參數文件list config --羅列出所有的參數文件(使用和未使…

ifconfig命令找不到_02. Linux命令之查看網絡連接

1. 查看網絡連接數和端口使用 netstat 命令查看網絡連接情況netstat -anp參數&#xff1a;-a 顯示所有選項-t (tcp)僅顯示tcp相關選項-u (udp)僅顯示udp相關選項-n 拒絕顯示別名&#xff0c;能顯示數字的全部轉化成數字。-p 顯示建立相關鏈接的程序名關鍵列解釋:Proto 表示協議…