求助萌萌CF题
  • 板块学术版
  • 楼主幽云蓝萌萌JS式神
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/11/16 19:16
  • 上次更新2023/11/4 00:23:50
查看原帖
求助萌萌CF题
149196
幽云蓝萌萌JS式神楼主2021/11/16 19:16

RT,前天的比赛的 div2E,也就是 CF1584E,蓝能理解官方题解的全部内容,但是蓝看到有部分 AC 的人使用了一种用 map 实现的简洁做法,例如这样:

#include<iostream>
#include<map>
using namespace std;
#define R register int
#define L long long
inline void Solve(){
	int n,tm=1,x;
	cin>>n;
	map<L,int>S;
	L td=0,ans=0;
	for(R i=0;i!=n;i++){
		cin>>x;
		if(tm==1){
			while(S.empty()==false&&S.rbegin()->first+td>x){
				S.erase(S.rbegin()->first);
			}
		}else{
			while(S.empty()==false&&-S.begin()->first+td>x){
				S.erase(S.begin()->first);
			}
		}
		tm=-tm;
		td=x-td;
		S[(x-td)*tm]++;
		ans+=S[-td*tm];
	}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	for(R i=0;i!=t;i++){
		Solve();
	}
	return 0;
}

蓝不太能理解这种做法采用了什么思路(感觉利用了某些妙妙的单调性?),有没有好心人帮一下蓝/kel

2021/11/16 19:16
加载中...