BZOJ2752 洛谷2221 HAOI2012 高速公路
来源:互联网 发布:法瑞尔威廉姆斯 知乎 编辑:程序博客网 时间:2024/05/16 08:43
题目描述
Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站。
Y901高速公路是一条由N-1段路以及N个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为1~N,从收费站i行驶到i+1(或从i+1行驶到i)需要收取Vi的费用。高速路刚建成时所有的路段都是免费的。
政府部门根据实际情况,会不定期地对连续路段的收费标准进行调整,根据政策涨价或降价。
无聊的小A同学总喜欢研究一些稀奇古怪的问题,他开车在这条高速路上行驶时想到了这样一个问题:对于给定的l,r(l
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<cstdlib>using namespace std;#define MAXN 100005#define LL long longstruct Seg_Tree{ int l,r; LL s[4],v; }tre[MAXN<<2];int n,m;char s[5];LL ans[5];LL GCD(LL a,LL b){ return b==0?a:GCD(b,a%b);}inline int read(int &x){ x=0;int f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=(x<<1)+(x<<3)+(c-'0');c=getchar(); } x*=f;}LL Get(int l,int r){ return 1LL*r*(r+1)*(2*r+1)/6LL-1LL*(l-1)*l*(2*l-1)/6LL;}inline void UpDate(int u,LL v){ int cnt=tre[u].r-tre[u].l+1; tre[u].s[1]+=1LL*cnt*v; tre[u].s[2]+=1LL*(tre[u].r+tre[u].l)*cnt/2LL*v; tre[u].s[3]+=1LL*Get(tre[u].l,tre[u].r)*v; tre[u].v+=v;}inline void Push_Up(int u){ for(int i=1;i<=3;i++) tre[u].s[i]=tre[u<<1].s[i]+tre[u<<1|1].s[i];}inline void Push_Down(int u){ UpDate(u<<1,tre[u].v);UpDate(u<<1|1,tre[u].v); tre[u].v=0;}void Add(int u,int l,int r,LL val){ if(l<=tre[u].l&&tre[u].r<=r){ UpDate(u,val); return ; } if(tre[u].v!=0) Push_Down(u); int Mid=(tre[u].l+tre[u].r)>>1; if(l<=Mid) Add(u<<1,l,r,val); if(r>Mid) Add(u<<1|1,l,r,val); Push_Up(u);}LL Query(int u,int l,int r,int k){ if(l<=tre[u].l&&tre[u].r<=r) return tre[u].s[k]; LL ans=0; if(tre[u].v!=0) Push_Down(u); int Mid=(tre[u].l+tre[u].r)>>1; if(l<=Mid) ans+=Query(u<<1,l,r,k); if(r>Mid) ans+=Query(u<<1|1,l,r,k); return ans;}void Build(int u,int l,int r){ tre[u].l=l;tre[u].r=r; tre[u].v=tre[u].s[0]=tre[u].s[1]=tre[u].s[2]=tre[u].s[3]=0; if(l==r) return; int Mid=(l+r)>>1; Build(u<<1,l,Mid); Build(u<<1|1,Mid+1,r);}int main(){ scanf("%d",&n);scanf("%d",&m); Build(1,1,n-1);//第n个点没有用 for(int i=1;i<=m;i++){ scanf("%s",s);LL l,r,v; scanf("%lld%lld",&l,&r); if(s[0]=='C'){ scanf("%lld",&v);Add(1,(int)l,(int)r-1,v); } else{ LL x=(r-l+1)*(r-l)/2LL; for(int i=1;i<=3;i++) ans[i]=Query(1,(int)l,(int)r-1,i); ans[0]=ans[1]*(r-l*r)+ans[2]*(l+r-1)-ans[3]; LL g=GCD(ans[0],x); printf("%lld/%lld\n",ans[0]/g,x/g); } } return 0;}
感谢来自cnblog CQzhangyu 的讲解
还有!
本机不过样例的AC:
阅读全文
0 0
- BZOJ2752 洛谷2221 HAOI2012 高速公路
- BZOJ2752 [HAOI2012]高速公路(road)
- 【BZOJ2752】[HAOI2012]高速公路
- 洛谷P2221 [HAOI2012] 高速公路
- 洛谷 P2221 [HAOI2012] 高速公路
- 【HAOI2012】高速公路
- bzoj2752 高速公路(road) 线段树
- [HAOI2012]高速公路(road)
- 2752: [HAOI2012]高速公路(road)
- [HAOI2012]高速公路(road)
- 【BZOJ 2752】 [HAOI2012]高速公路(road)
- BZOJ 2752: [HAOI2012]高速公路(road)
- Bzoj 2752: [HAOI2012]高速公路(road)
- BZOJ 2752 [HAOI2012]高速公路(road) 线段树
- BZOJ 2752 [HAOI2012]高速公路(road)【线段树
- bzoj 2752: [HAOI2012]高速公路(road) 线段树
- 【HAOI2012】高速公路 线段树区间维护
- [BZOJ]2752: [HAOI2012]高速公路(road) 线段树
- 数据结构与算法之二叉树
- 使用java程序调用oracle数据库的 procedure
- Hadoop安装
- c++windows编程,启动一个窗口完整代码
- c++面试问题总结(一)
- BZOJ2752 洛谷2221 HAOI2012 高速公路
- 问完这15个问题再决定你的网站要不要上线
- ubuntu14.04LTS_ftp服务器
- MySQL架构设计谈:从开发规范、选型、拆分到减压(一)
- android 关于app内设置字体样式的研究
- 使用PowerShell远程执行指令后返回执行或错误信息
- 自适应屏幕高度布局
- 数组中的逆序对
- 17倍