继:我死在快读上的一千零一夜——恳请各位大佬解惑T^T
查看原帖
继:我死在快读上的一千零一夜——恳请各位大佬解惑T^T
257348
theHermit楼主2020/8/23 21:55

白天根据好几个好心人(大佬)的建议,到P3865找了快读模板,并在多道题上使用均未出现问题

但是本题如果用此快读模板会第9个点WA

把以下code输入改成cin就能A了...

求解何故

错误code:

#include<bits/stdc++.h>
#define For(i,m,n) for(int i=m;i<n;i++)
#define r(a) read(a)
using namespace std;
typedef long long ll;
template <class T>
inline T read(T &x)
{
	x=0;
    T f=1;
    char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
const int INF=0x7fffffff;
const int MAX=2e6+5;
int n;
ll A[MAX];
ll res;
set<ll>::iterator Iter;
set<ll> mp;
void show()
{
    cout<<res;
}
void Try()
{
    res+=abs(A[0]);
    mp.insert(INF);
    mp.insert(-INF);
    mp.insert(A[0]);
    For(i,1,n){
        Iter=mp.lower_bound(A[i]);
        if(*Iter==A[i]) continue;
        set<ll>::iterator lastElement=Iter;//Iter是>=A[i]的第一个元素
        Iter--;
        res+=min(abs(*Iter-A[i]),abs(*lastElement-A[i]));
        mp.insert(A[i]);
    }
}

void input_1()
{
    r(n);
    For(i,0,n)  r(A[i]);
//    For(i,0,n)  cin>>A[i];
}

int main()
{
    input_1();
    Try();
    show();
    return 0;
}

2020/8/23 21:55
加载中...