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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

题解 CF1364B Most socially-distanced subsequence

發布時間:2024/5/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 题解 CF1364B Most socially-distanced subsequence 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題解 - C F 1364 B \mathrm{CF1364B} CF1364B

題目意思

  • 題目傳送門

S o l \mathrm{Sol} Sol

  • 首先我們考慮一個性質,如何才能使得貢獻盡量大。畫幾個圖看看

對于第一種一條直線類型的它的實際貢獻就是 ∣ c ? a ∣ |c-a| c?a,而對于第二種它的貢獻就為 ∣ a ? d ∣ + ∣ d ? b ∣ + . . . ∣ c ? e ∣ |a-d|+|d-b|+...|c-e| a?d+d?b+...c?e。發現能產生貢獻的情況就是那種峰,谷的情況,于是我們記錄這些拐點即可。時間復雜度 O ( n ) O(n) O(n)

C o d e \mathrm{Code} Code

#include <bits/stdc++.h> #define For(i,a,b) for ( int i=(a);i<=(b);i++ ) #define Dow(i,b,a) for ( int i=(b);i>=(a);i-- ) #define GO(i,x) for ( int i=head[x];i;i=e[i].nex ) #define mem(x,s) memset(x,s,sizeof(x)) #define cpy(x,s) memcpy(x,s,sizeof(x)) #define YES return puts("YES"),0 #define NO return puts("NO"),0 #define GG return puts("-1"),0 #define pb push_back using namespace std;inline int read() {int sum=0,ff=1; char ch=getchar();while(!isdigit(ch)){if(ch=='-') ff=-1;ch=getchar();}while(isdigit(ch))sum=sum*10+(ch^48),ch=getchar();return sum*ff; }const int mod=1e9+7; const int mo=998244353; const int N=1e5+5;int n,m,Q,a[N],b[N],ans;int main() {Q=read();For(q,1,Q){n=read();For(i,1,n) a[i]=read();b[m=1]=1;For(i,2,n-1) if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1])) b[++m]=i;b[++m]=n;printf("%d\n",m);For(i,1,m) printf("%d ",a[b[i]]);puts("");}return 0; }

總結

以上是生活随笔為你收集整理的题解 CF1364B Most socially-distanced subsequence的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。