首页 > 代码库 > 离线树状数组 hihocoder 1391 Countries
离线树状数组 hihocoder 1391 Countries
官方题解:
1 // 离线树状数组 hihocoder 1391 Countries 2 3 #include <iostream> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <algorithm> 7 #include <vector> 8 #include <math.h> 9 #include <memory.h>10 using namespace std;11 #define LL long long12 typedef pair<int,int> pii;13 const LL inf = 0x3f3f3f3f;14 const LL MOD =100000000LL;15 // const int N = 1e5+10;16 const double eps = 1e-8;17 void fre() {freopen("in.txt","r",stdin);}18 void freout() {freopen("out.txt","w",stdout);}19 inline int read() {int x=0,f=1;char ch=getchar();while(ch>‘9‘||ch<‘0‘) {if(ch==‘-‘) f=-1; ch=getchar();}while(ch>=‘0‘&&ch<=‘9‘) {x=x*10+ch-‘0‘;ch=getchar();}return x*f;}20 const int MAXN = 60010;21 struct node{22 LL l,r,v;23 }N[MAXN];24 25 LL f[MAXN],x[MAXN];26 int cmp(node a,node b){27 return a.r<b.r;28 }29 void add(LL w,LL v){30 for(;w<=MAXN;w+=w&(-w)) f[w]+=v;31 }32 LL getsum(LL w){33 LL sum=0;34 for(;w;w-=w&(-w)) sum+=f[w];35 return sum;36 }37 38 int main(){39 LL n,m,bs,nn,M;40 while(~scanf("%lld%lld",&n,&m)){41 memset(f,0,sizeof(f));42 memset(x,0,sizeof(x));43 scanf("%lld",&bs);44 scanf("%lld%lld",&nn,&M);45 LL r=m+bs;46 LL k=0;47 LL sum=0;48 for(LL i=1;i<=nn;i++){49 LL s,t,v;50 scanf("%lld%lld%lld",&s,&t,&v);51 if(s+t<bs||s+t>r) continue;52 else{53 N[++k].l=s+2*t,N[k].r=s+2*t+(r-s-t)/(2*t)*2*t;54 N[k].v=v;55 sum+=v;56 }57 }58 for(LL i=1;i<=M;i++){59 LL s,t,v;60 scanf("%lld%lld%lld",&s,&t,&v);61 N[++k].l=s+t,N[k].v=v;62 sum+=v;63 if(s+t*2<bs||s+t*2>r) N[k].r=N[k].l;64 else{65 N[k].r=s+3*t+(r-s-2*t)/(2*t)*2*t;66 }67 }68 LL g=k;69 k=0;70 for(LL i=1;i<=g;i++){71 x[++k]=N[i].l,x[++k]=N[i].r,x[++k]=N[i].r-n;72 }73 sort(N+1,N+1+g,cmp);74 sort(x+1,x+1+k);75 k=unique(x+1,x+1+k)-x-1;76 LL ans=-inf;77 for(LL i=1;i<=g;i++){78 LL w,pre,now;79 w=lower_bound(x+1,x+1+k,N[i].l)-x;80 now=lower_bound(x+1,x+1+k,N[i].r)-x;81 pre=lower_bound(x+1,x+1+k,N[i].r-n)-x;82 add(w,N[i].v);83 ans=max(ans,getsum(now)-getsum(pre-1));84 }85 printf("%lld\n",sum-ans);86 }87 return 0;88 }
离线树状数组 hihocoder 1391 Countries
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。