首页 > 代码库 > 未完成代码存档
未完成代码存档
#include <cstdio>#define Max 100000typedef long long LL;struct node{ LL l,r,dis,flag,Min_value,Max_value,set,time_set,time_add;}tr[Max<<2];int max(LL a,LL b){return a>b?a:b;}int min(LL a,LL b){return a>b?b:a;} LL n,m,Time;void up(LL k){ tr[k].dis=tr[k<<1].dis+tr[k<<1|1].dis; tr[k].Max_value=max(tr[k<<1].Max_value,tr[k<<1|1].Max_value); tr[k].Min_value=min(tr[k<<1].Min_value,tr[k<<1|1].Min_value);}void build(LL k,LL l,LL r){ tr[k].l=l;tr[k].r=r; if(l==r) { scanf("%lld",&tr[k].dis); tr[k].Max_value=tr[k].dis; tr[k].Min_value=tr[k].dis; return; } LL mid=(tr[k].l+tr[k].r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); up(k);}void section_add(int k,int l,int r,int v){ if(tr[k].l==l&&tr[k].r==r) { tr[k].dis+=(r-l+1)*v; tr[k].flag+=v; tr[k].time_add=++Time; return; } int mid=(tr[k].l+tr[k].r )>>1; if(l>mid) section_add(k<<1|1,l,r,v); else if(r<=mid) section_add(k<<1,l,r,v); else section_add(k<<1,l,mid,v),section_add(k<<1|1,mid+1,r,v); up(k);}void section_set(int k,int l,int r,int v){ if(tr[k].l==l&&tr[k].r==r) { tr[k].dis=(r-l)*v; tr[k].set=v; tr[k].time_set=++Time; return; } int mid=(tr[k].l+tr[k].r)>>1; if(l>mid) section_set(k<<1|1,l,r,v); else if(r<=mid) section_set(k<<1,l,r,v); else section_set(k<<1,l,mid,v),section_set(k<<1|1,mid+1,r,v); up(k);}void pushdown(LL k){ if(tr[k].l==tr[k].r) return; if(tr[k].time_add<tr[k].time_set) { tr[k<<1].set=tr[k].set; tr[k<<1|1].set=tr[k].set; tr[k<<1].dis=tr[k].set*(tr[k<<1].r-tr[k<<1].l+1); tr[k<<1|1].dis=tr[k].set*(tr[k<<1|1].r-tr[k<<1|1].l+1); tr[k<<1].time_set=tr[k].time_set; tr[k<<1|1].time_set=tr[k].time_set; tr[k<<1].time_add=tr[k].time_add; tr[k<<1|1].time_add=tr[k].time_add; tr[k].set=0; tr[k].flag=0; tr[k].time_add=0; tr[k].time_set=0; } if(tr[k].time_set<tr[k].time_add) { tr[k<<1].set=tr[k].set; tr[k<<1|1].set=tr[k].set; tr[k<<1].dis=tr[k].set*(tr[k<<1].r-tr[k<<1].l+1); tr[k<<1|1].dis=tr[k].set*(tr[k<<1|1].r-tr[k<<1|1].l+1); tr[k<<1].time_set=tr[k].time_set; tr[k<<1|1].time_set=tr[k].time_set; tr[k<<1].time_add=tr[k].time_add; tr[k<<1|1].time_add=tr[k].time_add; tr[k<<1].dis+=tr[k].flag*(tr[k<<1].r-tr[k<<1].l+1); tr[k<<1|1].dis+=tr[k].flag*(tr[k<<1|1].r-tr[k<<1|1].l+1); tr[k].set=0; tr[k].flag=0; tr[k].time_add=0; tr[k].time_set=0; }}LL query(LL k,LL l,LL r){ if(tr[k].l==l&&tr[k].r==r) return tr[k].dis; if(tr[k].flag||tr[k].set) pushdown(k); LL mid=(tr[k].l+tr[k].r)>>1; if(l>mid) return query(k<<1|1,l,r); else if(r<=mid) return query(k<<1,l,r); else return query(k<<1,l,mid)+query(k<<1|1,mid+1,r); up(k);}LL query_max(LL k,LL l,LL r){ if(tr[k].l==l&&tr[k].r==r) return tr[k].Max_value; if(tr[k].flag||tr[k].set) pushdown(k); LL mid=(tr[k].l+tr[k].r)>>1; if(l>mid) return query_max(k<<1|1,l,r); else if(r<=mid) return query_max(k<<1,l,r); else return max(query_max(k<<1,l,mid),query_max(k<<1|1,mid+1,r)); up(k);}LL query_min(LL k,LL l,LL r){ if(tr[k].l==l&&tr[k].r==r) return tr[k].Min_value; if(tr[k].flag||tr[k].set) pushdown(k); LL mid=(tr[k].l+tr[k].r)>>1; if(l>mid) return query_min(k<<1|1,l,r); else if(r<=mid) return query_min(k<<1,l,r); else return min(query_min(k<<1,l,mid),query_min(k<<1|1,mid+1,r)); up(k);}int main(){ scanf("%lld%lld",&n,&m); build(1,1,n); char str[4]; for(int x,y,z;m--;) { scanf("%s",str+1); if(str[1]==‘a‘) { scanf("%lld%lld%lld",&x,&y,&z); section_add(1,x,y,z); } else if(str[1]==‘s‘) { if(str[2]==‘e‘) { scanf("%lld%lld%lld",&x,&y,&z); section_set(1,x,y,z); } else if(str[2]==‘u‘) { scanf("%lld%lld",&x,&y); printf("%lld\n",query(1,x,y)); } } else if(str[1]==‘m‘) { scanf("%lld%lld",&x,&y); if(str[2]==‘a‘) printf("%lld\n",query_max(1,x,y)); else if(str[2]==‘i‘) printf("%lld\n",query_min(1,x,y)); } } return 0; }/*10 63 9 2 8 1 7 5 0 4 6add 4 9 4set 2 6 2add 3 8 2sum 2 10max 1 7min 3 6*/
未完成代码存档
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。