求助!!!树状数组写挂了!!!样例还没过
查看原帖
求助!!!树状数组写挂了!!!样例还没过
551803
BPG_ning楼主2022/8/28 18:09
#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=1e6+10;
int n,T[maxn<<2][2],ans=0;
int lowbit(int x){return x&(-x);}
void add(int x,int op){
	for(int i=x;i<maxn;i+=lowbit(i)) T[i][op]=max(T[i][op],x);
}
int sum(int x,int op){
	int cnm=-1;
	for(;x!=0;x-=lowbit(x)) ans=max(ans,T[x][op]);
	return cnm;
}
int main(){
	ios::sync_with_stdio(false);
	std::cin.tie(0);std::cout.tie(0);
	memset(T,200,sizeof(T));
	cin>>n;
	cin>>ans;
	add(ans+maxn,0);
	add(maxn-ans,1);
	for(int i=2;i<=n;i++){
		int x;
		cin>>x;
		ans+=min(x+maxn-sum(x+maxn,0),maxn-x-sum(maxn-x,1));
//		cout<<x+maxn-sum(x+maxn,0)<<' '<<maxn-x-sum(maxn-x,1)<<endl;
		add(x+maxn,0);
		add(maxn-x,1);
	}
	cout<<ans<<endl;
	return 0;
}
2022/8/28 18:09
加载中...