未完成代码存档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未完成代码存档相关的知识,希望对你有一定的参考价值。
#include <cstdio> #define Max 100000 typedef 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 6 3 9 2 8 1 7 5 0 4 6 add 4 9 4 set 2 6 2 add 3 8 2 sum 2 10 max 1 7 min 3 6 */
以上是关于未完成代码存档的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Android:存档-“未安装应用程序。包似乎已损坏”