专栏文章

7-28作业/重写ren_gao_zu

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mionut95
此快照首次捕获于
2025/12/02 22:15
3 个月前
此快照最后确认于
2025/12/02 22:15
3 个月前
查看原文

作业

P1886 滑动窗口 /【模板】单调队列

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000005];
int n,k;
deque<int>dq,pd;
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		while(!pd.empty()&&pd.front()+k<=i){
			pd.pop_front();
		}
		while(!pd.empty()&&a[i]<=a[pd.back()]){
			pd.pop_back();
		}
		pd.push_back(i);
		if(i>=k)cout<<a[pd.front()]<<" ";
	}
	
	cout<<endl;
	for(int i=1;i<=n;i++){
		while(!dq.empty()&&dq.front()+k<=i){
			dq.pop_front();
		}
		while(!dq.empty()&&a[i]>=a[dq.back()]){
			dq.pop_back();
		}
		dq.push_back(i);
		if(i>=k)cout<<a[dq.front()]<<" ";
	}
	return 0;
}

B3667 求区间所有后缀最大值的位置

CPP
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int a[10000005];
int n,k;
deque<int>dq;
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		while(!dq.empty()&dq.front()+k<=i){
			dq.pop_front();
		}
		while(!dq.empty()&&a[i]>a[dq.back()]){
			dq.pop_back();
		}
		dq.push_back(i);
		if(i>=k)cout<<dq.size()<<endl;
	}
	return 0;
}

P8661 [蓝桥杯 2018 省 B] 日志统计

CPP
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int n,d,k;
//int cnt;
int maxnnn=0;
deque<int>dq;
vector<int>v[100005],hot_id;

void solve(int i){
	//v[i].push_back(100000000);
	while(dq.size())dq.pop_back();
	for(int j=0;j<v[i].size();j++){
		
		while(dq.size()&&v[i][j]-dq.front()>=d){
			dq.pop_front();
		}
		dq.push_back(v[i][j]);
		if(dq.size()>=k){
			//cnt++;
			hot_id.push_back(i);
			break;
		}
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>d>>k;
	
	for(int i=1;i<=n;i++){
		int ts,id;
		cin>>ts>>id;
		v[id].push_back(ts);
		maxnnn=max(maxnnn,id);
	}
	for(int i=0;i<=maxnnn;i++){
		sort(v[i].begin(),v[i].end());
		solve(i);
	}//cout<<hot_id.size()<<endl;
	for(auto &x:hot_id ){
		cout<<x<<endl;
	}
	return 0;
}

重写

P2032 扫描

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000005];
int n,k;
deque<int>dq;
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		while(!dq.empty()&dq.front()+k<=i){
			dq.pop_front();
		}
		while(!dq.empty()&&a[i]>=a[dq.back()]){
			dq.pop_back();
		}
		dq.push_back(i);
		if(i>=k)cout<<a[dq.front()]<<endl;
	}
	return 0;
}

P1901 发射站(7-27作业重写)

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000005],v[1000005],sum[1000005];
stack<int>st;
int maxn=0;
signed main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>v[i];
	}
//	for(int i=0;i<=1e6;i++)
//		b1[i]=-1,b2[i]=-1;
	for(int i=1;i<=n;i++)
    {
		
		while(st.size()&&a[i]>a[st.top()]){
			sum[i]+=v[st.top()];
			st.pop();
        }
		if(st.size()){
			sum[st.top()]+=v[i];
		}
		st.push(i);
	}
	for(int i=1;i<=n;i++){
		maxn=max(maxn,sum[i]);
	}
	cout<<maxn;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...