题目链接

  这题……我从一开始就想歪了qwq。

  为了缅怀逝去的一小时我就把我的30分暴力思路放上来。

  首先我们观察枚举的区间。假设我们要枚举的范围是1~5之间的四条路,为了方便我们把它们叫做abcd。

  那么观察我们枚举的区间。

  a  ab  abc  abcd  b  bc  bcd  c  cd  d

  观察有一些区间是可以合起来的。

  然后观察a出现4次,b出现6次,c出现6次,d出现4次。

  是有一定规律的qwq

  然后就$\frac{nm}{2}的复杂度搞搞  就三十分

  正确思路是,观察一条路选不选上(设这条路左点x):左区间在(l,x),右区间在(x+1,r)

  这些区间会把这条路选上。

  于是这条路选上的次数就等于(x-l+1)(r-x)s[x]

  化简得到x*s[x]、s[x]、x^2*s[x]三种可以用线段树维护的东西

  然后线段树搞

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cstdlib>
#define left (rt<<1)
#define right (rt<<1|1)
#define mid ((l+r)>>1)
#define lson l,mid,left
#define rson mid+1,r,right
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long gcd(long long a,long long b){ return b==?a:gcd(b,a%b); } long long sum[];
long long mul[];
long long tree[];
long long sree[];
long long mree[];
long long tag[]; inline void pushup(int rt){
tree[rt]=tree[left]+tree[right];
sree[rt]=sree[left]+sree[right];
mree[rt]=mree[left]+mree[right];
} void pushdown(int rt,int l,int r){
if(tag[rt]==) return;
tag[left]+=tag[rt];
tag[right]+=tag[rt];
tree[left]+=tag[rt]*((r-l+)-((r-l+)>>));
tree[right]+=tag[rt]*((r-l+)>>);
sree[left]+=tag[rt]*(sum[mid]-sum[l-]);
sree[right]+=tag[rt]*(sum[r]-sum[mid]);
mree[left]+=tag[rt]*(mul[mid]-mul[l-]);
mree[right]+=tag[rt]*(mul[r]-mul[mid]);
tag[rt]=;
} void update(int from,int to,long long num,int l,int r,int rt){
if(from<=l&&to>=r){
tag[rt]+=num;
tree[rt]+=num*(r-l+);
sree[rt]+=num*(sum[r]-sum[l-]);
mree[rt]+=num*(mul[r]-mul[l-]);
return;
}
pushdown(rt,l,r);
if(from<=mid) update(from,to,num,lson);
if(to>mid) update(from,to,num,rson);
pushup(rt);
} struct Ans{
long long x,y,z;
void clear(){x=y=z=;}
Ans operator +(const Ans a){
Ans ans=(Ans){x+a.x,y+a.y,z+a.z};
return ans;
}
}; Ans query(int from,int to,int l,int r,int rt){
if(from<=l&&to>=r) return(Ans){tree[rt],sree[rt],mree[rt]};
pushdown(rt,l,r);
Ans opt; opt.clear();
if(from<=mid) opt=query(from,to,lson);
if(to>mid) opt=opt+query(from,to,rson);
return opt;
} int main(){
int n=read(),m=read();
for(int i=;i<=n;++i){
sum[i]=sum[i-]+i;
mul[i]=mul[i-]+1LL*i*i;
}
for(int i=;i<=m;++i){
char ch[];
scanf("%s",ch);int x=read(),y=read();
if(ch[]=='C'){
long long z=read();
update(x,y-,z,,n-,);
}
else{
Ans now=query(x,y-,,n-,);
long long ans=;
ans+=now.y*(long long)(x+y-);
ans+=now.x*(long long)(1LL*y-1LL*x*y);
ans-=now.z;
long long len=y-x+;
long long cnt=len*(len-)/;
long long gc=gcd(ans,cnt);
ans/=gc; cnt/=gc;
printf("%lld/%lld\n",ans,cnt);
}
}
return ;
}

【Luogu】P2221高速公路(线段树乱搞)的更多相关文章

  1. [bzoj1067][SCOI2007]降雨量——线段树+乱搞

    题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...

  2. 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)

    题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...

  3. JZYZOJ1527 [haoi2012]高速公路 线段树 期望

    http://172.20.6.3/Problem_Show.asp?id=1527 日常线段树的pushdown写挂,果然每次写都想得不全面,以后要注意啊……求期望部分也不熟练,和平均数搞混也是or ...

  4. Luogu P1471 方差 线段树

    那是上上周...也是重构了四遍...后来GG了...今天又拾起,搞了搞终于过了... 好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561 ...

  5. [Luogu] 可持久化线段树 1(主席树)

    https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include ...

  6. Luogu P5280 [ZJOI2019]线段树

    送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每 ...

  7. luogu 1712 区间(线段树+尺取法)

    题意:给出n个区间,求选择一些区间,使得一个点被覆盖的次数超过m次,最小的花费.花费指的是选择的区间中最大长度减去最小长度. 坐标值这么大,n比较小,显然需要离散化,需要一个技巧,把区间转化为半开半闭 ...

  8. Luogu P3960 列队 线段树

    题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...

  9. 【BZOJ-4523】路由表 Trie树 + 乱搞

    4523: [Cqoi2016]路由表 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 155  Solved: 98[Submit][Status][ ...

随机推荐

  1. 在广州学习PHP零基础可以学习吗?

    PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...

  2. java 访问docker的环境

    1.   配置环境 新增 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock root@ros ...

  3. Android(java)学习笔记132:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。

    导致这个错误的原因是工程重名了: 并不是仅仅指文件夹重名,相信很多人也曾经修改过文件夹的名称,可惜没什么用处,关键是修改工程里面的一个文件! 也就是.project这个文件! 用记事本打开,修改一下& ...

  4. Spark Job调优(Part 2)

    原文链接:https://wongxingjun.github.io/2016/05/11/Spark-Job%E8%B0%83%E4%BC%98-Part-2/ 这篇文章将会完成Part 1中留下的 ...

  5. [神经网络]一步一步使用Mobile-Net完成视觉识别(四)

    1.环境配置 2.数据集获取 3.训练集获取 4.训练 5.调用测试训练结果 6.代码讲解 本文是第四篇,下载预训练模型并训练自己的数据集. 前面我们配置好了labelmap,下面我们开始下载训练好的 ...

  6. Python-OpenCV——亮度和对比度

    亮度与对比度 亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度. OpenCV中亮度和对比度应用这个公式来计算:g(x) = αf ...

  7. cpp代码调试,调试扑克牌的代码

    #include <iostream> #include <vector> #include <algorithm> using namespace std; cl ...

  8. momentum公式

    momentum对于w的更新公式: http://caffe.berkeleyvision.org/tutorial/solver.html

  9. jsp页面之间传值 以及如何取出url的参数

    写项目时往往要写多个页面,而多个jsp之间传值有时是必要的,这时可以用到如下方法: 而在另一个页面取值可以用:${param.xxx}   此处的xxx就是要传递的值

  10. Spring IoC与DI(依赖注入)

    Spring Ioc 所谓控制反转,即将传统的需要代码进行的操作,交由Spring容器来做.下面以添加book为例进行比较一下: BookService.java public interface B ...