日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

导弹拦截

發(fā)布時(shí)間:2024/10/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 导弹拦截 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://www.luogu.org/problemnew/show/P1020

C++版本一

STL+二分+DP

題解:求一個(gè)序列里面最少有多少最長(zhǎng)不上升序列等于求這個(gè)序列里最長(zhǎng)上升序列的長(zhǎng)度。我們用f[x]數(shù)組(第一問(wèn))來(lái)記錄當(dāng)前長(zhǎng)度為x的不上升序列中最大的結(jié)束點(diǎn)(這個(gè)運(yùn)用了貪心的思想),如果當(dāng)前數(shù)小于等于當(dāng)前的最長(zhǎng)不上升序列的結(jié)束點(diǎn),那么我們把當(dāng)前最長(zhǎng)的不上升序列長(zhǎng)度加一,把當(dāng)前數(shù)作為這個(gè) 不下降序列的結(jié)束點(diǎn),不然我們就用二分查找(為什么可以呢?這是因?yàn)槲覀冞\(yùn)用了貪心的思/想后能保證長(zhǎng)度越大的不上升序列結(jié)束點(diǎn)越小),試著用當(dāng)前數(shù)去更新長(zhǎng)度為x的不上升序列的結(jié)束點(diǎn)(又是貪心的思想,只更新長(zhǎng)度最長(zhǎng)且結(jié)束點(diǎn)小于自己的),然后第二問(wèn)你再反著做就行了(把大于等于改為小于)

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int using namespace std; typedef long long ll; typedef __int128 lll; const int N=100000+100; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,q; int a[N]; int f[N],l[100005]; struct cmp{bool operator()(int a,int b){return a>b;}}; int main() { #ifdef DEBUGfreopen("input.in.txt", "r", stdin);//freopen("output.out", "w", stdout); #endifwhile(scanf("%d",&a[++n])!=EOF);n--;int con=1,cont=1;l[1]=f[1]=a[1];for(int i=2;i<=n;i++){if(l[cont]>=a[i])l[++cont]=a[i];elsel[upper_bound(l+1,l+cont+1,a[i],cmp())-l]=a[i];if(f[con]<a[i])f[++con]=a[i];elsef[lower_bound(f+1,f+con+1,a[i])-f]=a[i];}cout<<cont<<" "<<con;//cout << "Hello world!" << endl;return 0; }

C++版本二

二分+DP

#include<cstdio> #include<string.h> #include<iostream> using namespace std; const int maxn=100005; int a[maxn]; int f[maxn]; int main() {int n=0;int l,r,mid;while(scanf("%d",&a[++n])!=EOF)continue;n--;f[0]=1234123412;//這個(gè)數(shù)要大于50000,不然可能你就無(wú)法更新int ans1=0;for(int i=1;i<=n;i++){if(f[ans1]>=a[i]){f[ans1+1]=a[i];//結(jié)束點(diǎn)為a[i]ans1++; //當(dāng)前最長(zhǎng)不上升序列的長(zhǎng)度加一}else {//二分查找l=0;r=ans1;while(l<r){mid=(l+r)/2;if(f[mid]>=a[i])l=mid+1;else {r=mid; }}if(l!=0)f[l]=a[i];}}cout<<ans1<<endl;//輸出第一問(wèn)的答案memset(f,-1,sizeof(f));//這次前面要盡量小了,不然又無(wú)法更新int ans2=0;for(int i=1;i<=n;i++){if(f[ans2]<a[i]){f[ans2+1]=a[i];//結(jié)束點(diǎn)為a[i]ans2++; //當(dāng)前最長(zhǎng)上升序列長(zhǎng)度加一}else {//二分查找l=0;r=ans2;while(l<r){mid=(l+r)/2;if(f[mid]>=a[i])r=mid;else {l=mid+1; }}f[l]=a[i];}}cout<<ans2<<endl;//輸出第二個(gè)答案 }

C++版本三

樹(shù)狀數(shù)組?

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int f[1000000]; int z[1000000]; int lowbit(int x) {return x&-x; } int big; inline int ask(int x)//這是用來(lái)求單調(diào)上升子序列的 {int r=0;for(int i=x;i>0;i-=lowbit(i))r=max(r,f[i]);return r; } inline void add(int x,int v)//這也是用來(lái)求單調(diào)上升子序列的 {for(int i=x;i<=big;i+=lowbit(i))f[i]=max(f[i],v); } inline int que(int x)//這是用來(lái)求最長(zhǎng)單調(diào)不升子序列的 {int r=0;for(int i=x;i<=big;i+=lowbit(i))r=max(r,f[i]);return r; } inline void psh(int x,int v)//這也是用來(lái)求最長(zhǎng)單調(diào)不升子序列的 {for(int i=x;i>0;i-=lowbit(i))f[i]=max(f[i],v); } int tot; int a[1000000]; int ans; int main() {tot=1;while(scanf("%d",&a[tot])!=EOF){big=max(big,a[tot]);z[tot]=a[tot];tot++;}tot--;//讀入并統(tǒng)計(jì)個(gè)數(shù)for(int i=1;i<=tot;i++)//求最長(zhǎng)單升子序列,樹(shù)狀數(shù)組中保存的是0~a[i]的最大值{int x=ask(a[i])+1;ans=max(ans,x);add(a[i]+1,x);//因?yàn)槭菄?yán)格單升所以這里要+1}memset(f,0,sizeof(f));//清空樹(shù)狀數(shù)組,用來(lái)求下面的不降子序列int num=0;for(int i=1;i<=tot;i++)//求最長(zhǎng)不降子序列,樹(shù)狀數(shù)組里存的是a[i]~inf的最大值{int x=que(a[i])+1;num=max(num,x);psh(a[i],x);//因?yàn)槭遣簧皇菄?yán)格單降所以不用-1或+1}printf("%d\n%d",num,ans);return 0; }

C++版本四

#include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n=0,a[100001],f[100001],d[100001],ans=1,t=0; int main() {while(~scanf("%d",&a[++n]));//讀入數(shù)據(jù)方法n--;//n是導(dǎo)彈數(shù),由于某些原因要--for(int i=1; i<=n; i++) {f[i]=1;for(int j=t; j>0; j--)if(a[i]<=a[d[j]]) {f[i]=f[d[j]]+1;break;}t=max(t,f[i]);d[f[i]]=i;//簡(jiǎn)單的維護(hù)過(guò)程ans=max(ans,f[i]);}printf("%d\n",ans);ans=1;t=0;for(int i=1; i<=n; i++) {f[i]=1;for(int j=t; j>0; j--)if(a[i]>a[d[j]]) {f[i]=f[d[j]]+1;break;}t=max(t,f[i]);d[f[i]]=i;ans=max(ans,f[i]);}printf("%d",ans); }

?

總結(jié)

以上是生活随笔為你收集整理的导弹拦截的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久资源 | 亚洲国产综合视频 | 射久久 | 91网页在线观看 | 欧美爱爱视频 | jizz欧美性20| 打屁股外国网站 | a级片在线看 | 欧美在线视频免费播放 | 亚洲一区免费在线观看 | 精品久久久久久久久久久久久久久 | 日本高清网色 | 蜜桃久久精品成人无码av | 日韩欧美在线视频观看 | a∨鲁丝一区鲁丝二区鲁丝三区 | 亚洲av成人精品午夜一区二区 | 免费av中文字幕 | 久久久久国产精品区片区无码 | 色婷婷av一区二区三区软件 | 97久久久久久久 | 国产精品视频福利 | 久久久久免费精品 | 亚洲一区二区三区四区 | 国产农村妇女精品久久久 | 中文字字幕一区二区三区四区五区 | 蜜桃视频欧美 | 综合精品国产 | 黄污视频网站 | 特级西西444www大精品视频 | 贝利弗山的秘密1985版免费观看 | 亚洲天堂男人天堂 | 成熟女人毛片www免费版在线 | 亚洲精品免费在线视频 | 国产夫妻自拍小视频 | 欧美视频成人 | 亚洲精选久久久 | 91嫩草网 | 受虐m奴xxx在线观看 | 欧美福利视频一区二区 | 16一17女人毛片 | 婷婷的五月 | 超碰98在线观看 | 免费国产一区二区三区 | 涩涩天堂 | 91视频二区 | 拍摄av现场失控高潮数次 | 日本丰满大乳奶做爰 | 日本在线| 亚洲国产二区 | 成年女人免费视频 | 国产又粗又猛又爽又黄视频 | 51福利视频 | 久久久一二三区 | 男女做激情爱呻吟口述全过程 | 四虎影视永久免费 | 亚洲 日本 欧美 中文幕 | japan高清日本乱xxxxx | 国产精品麻豆成人av电影艾秋 | 亚洲AV成人精品 | 国产精彩视频在线观看 | 亚洲理论片在线观看 | 亚洲综合一区二区 | 国产美女一级片 | 美女网站视频在线观看 | 亚洲第一色站 | 欧美一区二区大片 | 精品在线一区 | 操操网 | 性爱动漫 | 老熟妇午夜毛片一区二区三区 | 色综合五月天 | 午夜精品一区二区三区免费视频 | 亚洲熟妇中文字幕五十中出 | 亚洲wwww| 熟女丝袜一区 | 一级免费视频 | 91色国产| 十八禁毛片 | 88xx成人永久免费观看 | 国产日韩片 | 蜜桃视频一区二区三区在线观看 | 一区二区三区高清在线观看 | 国产一级在线视频 | 黄色一区二区视频 | 爱吃波客今天最新视频 | 国色天香网站 | 黄色片视频在线观看 | 蜜臀av中文字幕 | xxxxhdvideos| 成人免费一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 蜜臀久久99精品久久久画质超高清 | 中文字幕亚洲欧美日韩在线不卡 | 午夜专区| 牛牛电影国产一区二区 | 男女福利视频 | 我们的2018中文免费看 | 久久久精品中文字幕 | 欧美一级淫片免费视频魅影视频 |