标签:tput update des 多少 覆盖 content 情况 tran hdu
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1132 Accepted Submission(s): 309
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define met(a,b) memset(a,b,sizeof a) #define inf 10000000 using namespace std; typedef long long ll; typedef pair<int,int>pii; const int N = 4e5+5; const double eps = 1e-8; int n,sum[2*N],m; int lazy[2*N],a[N],mi[N*2],ma[N*2]; vector<int>st[N],en[N]; struct man{ int u,v; }q[N]; void init(){ for(int i=0;i<N;i++){ st[i].clear(); en[i].clear(); } } void pushDown(int pos){ if(mi[pos]!=inf){ mi[pos*2]=min(mi[pos*2],mi[pos]); mi[pos*2+1]=min(mi[pos*2+1],mi[pos]); } if(ma[pos]!=0){ ma[pos*2]=max(ma[pos*2],ma[pos]); ma[pos*2+1]=max(ma[pos*2+1],ma[pos]); } return; } void update(int L,int R,int val,int l,int r,int pos) { if(l>=L&&r<=R) { mi[pos]=min(mi[pos],val); ma[pos]=max(ma[pos],val); return; } int mid=(l+r)>>1; pushDown(pos); if(L<=mid) update(L,R,val,l,mid,pos<<1); if(mid<R)update(L,R,val,mid+1,r,pos<<1|1); } void query(int l,int r,int pos) { if(l==r){ if(mi[pos]!=inf)st[mi[pos]].pb(l); if(ma[pos]!=0)en[ma[pos]+1].pb(l); return; } int mid=(l+r)>>1; pushDown(pos); query(l,mid,pos<<1); query(mid+1,r,pos<<1|1); return; } void build(int l,int r,int pos){ mi[pos]=inf; ma[pos]=0; if(l==r){ return; } int mid=(l+r)/2; build(l,mid,pos*2); build(mid+1,r,pos*2+1); } int main() { int ll,rr,cnt=0; while(~scanf("%d%d",&n,&m)){ init(); build(1,n-1,1); for(int i=1;i<n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=m;i++){ scanf("%d%d",&q[i].u,&q[i].v); if(q[i].u>q[i].v)swap(q[i].u,q[i].v); update(q[i].u,q[i].v-1,i,1,n-1,1); } query(1,n-1,1); int ans=0; for(int i=1;i<=m;i++){ for(int x:st[i]){ ans+=a[x]; } for(int x:en[i]){ ans-=a[x]; } printf("%d\n",ans); } } return 0; }
标签:tput update des 多少 覆盖 content 情况 tran hdu
原文地址:http://www.cnblogs.com/jianrenfang/p/6784446.html