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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【AC Saber】数据结构

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【AC Saber】数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 單鏈表
  • 雙鏈表
  • 隊列
  • 單調棧
  • 單調隊列
  • KMP

單鏈表

#include<cstdio> #include<iostream> using namespace std; const int N=1e5+10; int e[N],ne[N],head,idx,m; void init() {head=-1;idx=0; } void add_head(int k) {e[idx]=k,ne[idx]=head,head=idx++; } void add(int k,int x) {e[idx]=x,ne[idx]=ne[k],ne[k]=idx++; } void remove(int k) {ne[k]=ne[ne[k]]; } int main(void) {cin>>m;init();while(m--){string op; cin>>op;if(op=="H"){int x; cin>>x;add_head(x);}if(op=="D"){int k; cin>>k; if(k) remove(k-1);else head=ne[head];//頭結點的特殊情況}if(op=="I"){int k,x; cin>>k>>x;add(k-1,x);}}for(int i=head;i!=-1;i=ne[i]) cout<<e[i]<<" ";return 0; }

雙鏈表

#include<cstdio> #include<iostream> using namespace std; const int N=1e5+10; int e[N],l[N],r[N],idx,n; void init() {r[0]=1;l[1]=0;idx=2; } void add(int k,int x) {e[idx]=x,r[idx]=r[k],l[r[k]]=idx,l[idx]=k,r[k]=idx++; } void remove(int k) {l[r[k]]=l[k];r[l[k]]=r[k]; } int main(void) {cin>>n;init();while(n--){string op; cin>>op;if(op=="L"){int x;cin>>x;add(0,x);}if(op=="R"){int x; cin>>x;add(l[1],x);}if(op=="D"){int x; cin>>x;remove(x+1);}if(op=="IL"){int k,x; cin>>k>>x;add(l[k+1],x);}if(op=="IR"){int k,x; cin>>k>>x;add(k+1,x);}}for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<" ";return 0; }

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=1e5+10; int a[N],tt,n; int main(void) {cin>>n;while(n--){string op; cin>>op;if(op=="push"){int x; cin>>x;a[tt++]=x;}if(op=="pop") tt--;if(op=="empty") {if(tt) cout<<"NO"<<endl;else cout<<"YES"<<endl;}if(op=="query") cout<<a[tt-1]<<endl;}return 0; }

隊列

#include<cstdio> #include<iostream> using namespace std; const int N=1e5+10; int a[N],l,r,n; int main(void) {cin>>n;while(n--){string op; cin>>op;if(op=="push"){int x; cin>>x;a[r++]=x;}if(op=="pop") l++;if(op=="empty"){if(r==l) cout<<"YES"<<endl;else cout<<"NO"<<endl;}if(op=="query") cout<<a[l]<<endl;}return 0; }

單調棧

#include<cstdio> #include<iostream> #include<stack> using namespace std; stack<int>st; int main(void) {int n; cin>>n;while(n--){int x; cin>>x;while(st.size()&&st.top()>=x) st.pop();if(st.size()&&st.top()<x) cout<<st.top()<<" ";else cout<<"-1 ";st.push(x);} } #include<cstdio> #include<iostream> using namespace std; const int N=1e5+10; int a[N],tt,n; int main(void) {cin>>n;while(n--){int x; cin>>x;while(a[tt]>=x) tt--;if(tt) cout<<a[tt]<<" ";else cout<<-1<<" ";a[++tt]=x;}return 0; }

單調隊列

#include<cstdio> #include<iostream> #include<queue> using namespace std; const int N=1e6+10; int a[N],n,k; deque<int>qe,temp; int main(void) {cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){if(qe.size()&&i-k+1>qe.front()) qe.pop_front();while(qe.size()&&a[qe.back()]>=a[i]) qe.pop_back();qe.push_back(i);if(i>=k) cout<<a[qe.front()]<<" ";}cout<<endl;qe=temp;for(int i=1;i<=n;i++){if(qe.size()&&i-k+1>qe.front()) qe.pop_front();while(qe.size()&&a[qe.back()]<=a[i]) qe.pop_back();qe.push_back(i);if(i>=k) cout<<a[qe.front()]<<" ";}return 0; } #include<cstdio> #include<iostream> using namespace std; const int N=1e6+10; int q[N],a[N],hh,tt=-1; int main(void) {int n,k; cin>>n>>k;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n;i++){if(i-k+1>q[hh]) hh++;while(hh<=tt&&a[i]<a[q[tt]]) tt--;q[++tt]=i;if(i+1>=k) cout<<a[q[hh]]<<" ";}cout<<endl;hh=0,tt=-1;for(int i=0;i<n;i++){if(i-k+1>q[hh]) hh++;while(hh<=tt&&a[i]>a[q[tt]]) tt--;q[++tt]=i;if(i+1>=k) cout<<a[q[hh]]<<" ";}cout<<endl;return 0; }

KMP

#include<cstdio> #include<iostream> using namespace std; const int N=1e5+10,M=1e6+10; char p[N],s[M]; int ne[N]; int n,m; int main(void) {cin>>n>>p+1>>m>>s+1;for(int i=2,j=0;i<=n;i++) {while(j&&p[i]!=p[j+1]) j=ne[j];if(p[i]==p[j+1]) j++;ne[i]=j;}for(int i=1,j=0;i<=m;i++){while(j&&s[i]!=p[j+1]) j=ne[j];if(s[i]==p[j+1]) j++;if(j==n){j=ne[j];cout<<i-n<<" ";}}return 0; }

總結

以上是生活随笔為你收集整理的【AC Saber】数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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