diff --git a/src/10/22/P5835.cpp b/src/10/22/P5835.cpp new file mode 100644 index 0000000..9684271 --- /dev/null +++ b/src/10/22/P5835.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include +#include +#include +using ll = int64_t; + +const ll maxn = 5e4+5; +ll n,l,allweight; +struct P{ + ll w,x,d; + inline bool operator<(const P&other)const{ + return x after,rafter,tmp; +std::unordered_set vis; + +static inline ll merge(std::vector&num,std::vector&tmp,ll l,ll mid,ll r){ + ll cnt=0; + ll i=l,j=mid+1,k=l; + while(i<=mid&&j<=r){ + if(num[i]<=num[j]){ + tmp[k++]=num[i++]; + }else{ + cnt+= mid-i+1; + tmp[k++]=num[j++]; + } + } + while(i<=mid)tmp[k++]=num[i++]; + while(j<=r)tmp[k++]=num[j++]; + for(ll i=l;i<=r;i++){ + num[i]=tmp[i]; + } + return cnt; +} + +static inline ll mergesort(std::vector&num,std::vector&tmp,ll l,ll r){ + ll cnt=0; + if(l>n>>l; + after.reserve(n+1); + tmp.resize(n+1); + for(ll i=1;i<=n;i++){ + std::cin>>c[i].w>>c[i].x>>c[i].d; + allweight+=c[i].w; + } + std::sort(c+1,c+1+n); + for(ll i=1;i<=n;i++){ + dis[i].idx=i; + if(c[i].d==1){ + dis[i].d=l-c[i].x; + }else{ + dis[i].d=c[i].x; + } + } + std::sort(dis+1,dis+1+n); + ll outweight=0; + ll pout=0; + for(ll i=1;i<=n;i++){ + outweight+=c[dis[i].idx].w; + // printf("%lld is out\n",c[dis[i].idx].x); + pout=dis[i].d; + vis.emplace(dis[i].idx); + if(outweight*2>=allweight){ + break; + } + } + // printf("lnum=%lld, rnum=%lld\n",lnum,rnum); + // std::cout<<"after:\n"; + // for(ll i:after){ + // std::cout<