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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ACL Beginner Contest 总结——F多项式待补

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACL Beginner Contest 总结——F多项式待补 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A - Repeat ACL

簽到題1

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=500010; int main() {IO;int T=1;//cin>>T;while(T--){int n;cin>>n;string s="ACL";while(n--) cout<<s;cout<<'\n';}return 0;}

B - Integer Preference

簽到題2

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; int main() {IO;int T=1;//cin>>T;while(T--){ll a,b,c,d;cin>>a>>b>>c>>d;if(b<c||d<a) cout<<"No\n";else cout<<"Yes\n";}return 0; }

C - Connect Cities

簡單并查集維護連通關系即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=500010; int n,m; int p[N]; int find(int x) {return x==p[x]?x:p[x]=find(p[x]); } int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) p[i]=i;while(m--){int a,b;cin>>a>>b;p[find(a)]=find(b);}int res=0;for(int i=1;i<=n;i++)if(i==p[i]) res++;cout<<res-1<<'\n';}return 0;}

D - Flat Subsequence

剛開始把相鄰看成整個子序列絕對值差都不大于K,于是先做的E
值域線段樹優化dp
狀態表示:fif_ifi?考慮前iii個數,且選擇aia_iai?作為子序列結尾的集合。
狀態轉移:fi=max(fi,fj+1)(∣aj?ai∣≤K)f_i=max(f_i,f_j+1)(|a_j-a_i|\leq K)fi?=max(fi?,fj?+1)(aj??ai?K)
考慮優化:能夠更新fif_ifi?必須滿足ai?K≤aj≤ai+Ka_i-K\leq a_j\leq a_i+Kai??Kaj?ai?+K,于是考慮權值線段樹維護區間,每次把aia_iai?打到權值線段樹中,值為fif_ifi?,然后只需要求區間最值即可。單點修改、區間查詢。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=300010; const ll mod=998244353; int f[N]; int n,k; int a[N]; struct node {int l,r;//值域int val; }tree[N*4]; void pushup(int u) {tree[u].val=max(tree[u<<1].val,tree[u<<1|1].val); } void build(int u,int l,int r) {tree[u]={l,r,0};if(l==r) return;int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r); } void modify(int u,int pos,int val) {if(tree[u].l==tree[u].r) {tree[u].val=max(tree[u].val,val);return;}int mid=tree[u].l+tree[u].r>>1;if(pos<=mid) modify(u<<1,pos,val);else modify(u<<1|1,pos,val);pushup(u); } int query(int u,int l,int r) {if(tree[u].l>=l&&tree[u].r<=r) return tree[u].val;int mid=tree[u].l+tree[u].r>>1;int v=0;if(l<=mid) v=max(v,query(u<<1,l,r));if(r>mid) v=max(v,query(u<<1|1,l,r));return v; } int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];build(1,0,300000);int res=0;for(int i=1;i<=n;i++){int l=max(0,a[i]-k),r=min(300000,a[i]+k);f[i]=1+query(1,l,r);modify(1,a[i],f[i]);res=max(res,f[i]);}cout<<res<<'\n';}return 0;}

E - Replace Digits

線段樹維護十進制下的數即可(取模)
預處理num[][]數組,num[i][j]表示iii…i(j個i)iii\dots\ i(j個i)iii?i(ji),ten[]數組,ten[i]表示10i10^i10i,注意取模保存,有了這兩個數組,區間合并就很好寫了。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=200010; const ll mod=998244353; int n,m; struct node {int l,r;ll s;int lazy; }tree[N*4]; ll ten[N]; ll num[10][N]; void pushup(int u) {int lenr=tree[u<<1|1].r-tree[u<<1|1].l+1;tree[u].s=(tree[u<<1].s*ten[lenr]%mod+tree[u<<1|1].s)%mod; } void build(int u,int l,int r) {tree[u]={l,r,0,0};if(l==r){tree[u].s=1;return ;}int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u); } void pushdown(int u) {if(!tree[u].lazy) return;tree[u<<1].lazy=tree[u<<1|1].lazy=tree[u].lazy;tree[u<<1].s=num[tree[u].lazy][tree[u<<1].r-tree[u<<1].l+1];tree[u<<1|1].s=num[tree[u].lazy][tree[u<<1|1].r-tree[u<<1|1].l+1];tree[u].lazy=0; } void modify(int u,int l,int r,int x) {if(tree[u].l>=l&&tree[u].r<=r){tree[u].s=num[x][tree[u].r-tree[u].l+1];tree[u].lazy=x;return;}pushdown(u);int mid=tree[u].l+tree[u].r>>1;if(l<=mid) modify(u<<1,l,r,x);if(r>mid) modify(u<<1|1,l,r,x);pushup(u); } int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;ten[0]=1;for(int i=1;i<=n;i++) ten[i]=10*ten[i-1]%mod;for(int i=1;i<=9;i++){for(int j=1;j<=n;j++)num[i][j]=(num[i][j-1]*10%mod+i)%mod;}build(1,1,n);while(m--){int l,r,x;cin>>l>>r>>x;modify(1,l,r,x);cout<<tree[1].s<<'\n';}}return 0;}

F - Heights and Pairs

不會多項式,會了可能補

先貼個代碼,搞會兒信號與系統晚上再補剩余的QaQ
要加油哦~

總結

以上是生活随笔為你收集整理的ACL Beginner Contest 总结——F多项式待补的全部內容,希望文章能夠幫你解決所遇到的問題。

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