2527: [Poi2011]Meteors|整体二分
来源:互联网 发布:一根网线几个淘宝店铺 编辑:程序博客网 时间:2024/05/19 18:48
二分一个答案,对
分到左边一组,其余的分到右面一组继续向下分治递归处理
#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<vector>#include<queue>#include<cmath>#include<set>#include<map>#define lowbit(x) (x&(-x))#define N 310000#define ll long longusing namespace std;int sc(){ int i=0,f=1;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}struct W{int l,r,v;}a[N];int head[N],nxt[N],lst[N],nd[N];int q[N],q1[N],q2[N],ans[N],now;ll tr[N],sum[N];int n,m,tot,K;void insert(int x,int y){ lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;}void change(int x,int f){ for(;x<=m;x+=lowbit(x)) tr[x]+=f;}void updata(int x,int f){ if(a[x].r>=a[x].l) { change(a[x].l,f*a[x].v); change(a[x].r+1,-f*a[x].v); } else { change(a[x].l,f*a[x].v); change(a[x].r+1,-f*a[x].v); change(1,f*a[x].v); }}ll ask(int x){ ll ans=0; for(;x;x-=lowbit(x)) ans+=tr[x]; return ans;}void solve(int s,int t,int l,int r){ if(t<s)return; if(l==r) { for(int i=s;i<=t;i++) ans[q[i]]=l; return; } int mid=l+r>>1; while(now<mid)updata(++now,1); while(now>mid)updata(now--,-1); int p1=0,p2=0; for(int i=s;i<=t;i++) { ll sum=0; for(int j=head[q[i]];j;j=nxt[j]) { sum+=ask(lst[j]); if(sum>=nd[q[i]])break;//sum答案会爆long long!!!!!!!!!!!!!!!!!!!! } if(sum>=nd[q[i]]) q1[++p1]=q[i]; else q2[++p2]=q[i]; } for(int i=1;i<=p1;i++) q[s+i-1]=q1[i]; for(int i=1;i<=p2;i++) q[s+p1+i-1]=q2[i]; solve(s,s+p1-1,l,mid),solve(s+p1,t,mid+1,r);}int main(){ n=sc(),m=sc(); for(int i=1;i<=m;i++) insert(sc(),i); for(int i=1;i<=n;i++) nd[q[i]=i]=sc(); K=sc(); for(int i=1;i<=K;i++) a[i].l=sc(),a[i].r=sc(),a[i].v=sc(); solve(1,n,1,K+1); for(int i=1;i<=n;i++) if(ans[i]<=K) printf("%d\n",ans[i]); else puts("NIE"); return 0;}
0 0
- 2527: [Poi2011]Meteors|整体二分
- 2527: [Poi2011]Meteors 整体二分+树状数组
- BZOJ 2527: [Poi2011]Meteors 整体二分
- BZOJ 2527: [Poi2011]Meteors【整体二分】
- bzoj 2527: [Poi2011]Meteors 整体二分
- 整体二分 【Poi2011】 Meteors bzoj2527
- bzoj 2527: [Poi2011]Meteors (树状数组+整体二分)
- 【BZOJ】2527 [Poi2011]Meteors 整体二分+树状数组
- BZOJ 2527 [Poi2011]Meteors [整体二分+线段树]
- BZOJ 2527: [Poi2011]Meteors 整体二分 树状数组
- [整体二分+树状数组]BZOJ 2527——[Poi2011]Meteors
- bzoj 2527 [Poi2011]Meteors 整体二分+树状数组
- 【BZOJ】【P2527】【Poi2011】【Meteors】【题解】【整体二分】
- [BZOJ2527][Poi2011]Meteors(整体二分+bit)
- [BZOJ2527][Poi2011][整体二分][树状数组]Meteors
- 【BZOJ2527】【POI2011】Meteors(整体二分)
- 整体二分——[Poi2011]Meteors
- 【整体二分+树状数组】BZOJ2527 [Poi2011]Meteors
- 好书推荐《富足》
- RelativeLayout加上android:layout_alignParentBottom="true"让某一部分靠最底部
- What is SCAN in Oracle 11g R2 RAC
- [蓝桥杯]入门训练
- Table边框使用总结 ,只显示你要显示的边框
- 2527: [Poi2011]Meteors|整体二分
- 大型网站架构系列:电商网站架构案例(3)
- python和flask,web开发
- Android之定时器实现的几种方式和removeCallbacks失效问题详解
- 创建一个简单的HTTP服务(自动查找未使用的端口)
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- Android Studio怎么关联supportV4的源码
- 创建ACFS集群文件系统(命令方式)
- SPOJ NSUBSTR(后缀自动机)