1.链表与邻接表:
单链表(数组):
#inclued<iostream>
using namespace std;
const int N = 1e5+10;
int e[N],ne[N],head,idx;
void init()
{
head = -1;
idx = 0;
}
void insert_head(int x)
{
e[idx] = x;
ne[idx] =head;
head = idx;
idx++;
}
void add(int x,int k)
{
e[idx] = x;
ne[idx]=ne[k];
ne[k]=idx;
idx++;
}
void remove(int k)
{
ne[k] = ne[ne[k]];
}
void solve()
{
}
signed main()
{
solve();
return 0;
}
双链表(数组):
单调队列(滑动窗口)
理解:
维护区间内的单调性 (不是排序)
#include<iostream>
using namespace std;
const int N = 1e7+10;
#define int long long
int a[N];
int minn[N];
int max[N];
int q[N];
signed main(){
int n,k;
cin>>n>>k;
for(int i = 1;i<=n;i++)
cin>>a[i];
int r = 0;int l = 1;
for(int i = 1;i<=n;i++)
{
while(r>=l&&a[i]<=a[q[r]])r--;
q[++r]= i;
if(q[r]-q[l]+1>k)
l++;
if(i>=k)
cout<<a[q[l]]<<" ";
}
cout<<"\n";
for(int i = 1;i<=n;i++)
{
while(r>=l&&a[i]>=a[q[r]])r--;
q[++r]= i;
if(q[r]-q[l]+1>k)
l++;
if(i>=k)
cout<<a[q[l]]<<" ";
}
return 0;
}
}