ural1855 Trade Guilds of Erathia
Trade Guilds of Erathia
Memory limit: 64 MB
Input
- “change a b d”: the fee for travelling along each route segment between cities a and bchanged by d gold coins (if d is positive, the fee increased; if d is negative, the fee decreased);
- “establish a b”: a new guild which is present in all cities between a and b was established.
All numbers are integers; 1 ≤ a < b ≤ n; −10 000 ≤ d ≤ 10 000. Cities are numbered in the order they are located along the route: from Bracada to Deyja. The fee for travelling along a segment was never larger than 10 000 gold coins, otherwise merchants would protest. Of course, the fee was always non-negative. Before the first royal order changing the fee, it is equal to zero for all route segments.
Output
Sample
input | output |
---|---|
|
|
分析:设询问区间为[l,r],第k条路编号为k+1;
则第k条路的贡献为(k-l)*(r-k+1)*cost[k];
展开后即[-k*k+(l+1+r)*k-l-l*r]*cost[k];
线段树单点维护好cost[k],k*cost[k],k*k*cost[k]即可;
注意爆int;
代码:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <climits>
- #include <cstring>
- #include <string>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <list>
- #define rep(i,m,n) for(i=m;i<=n;i++)
- #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
- #define mod 1000000007
- #define inf 0x3f3f3f3f
- #define vi vector<int>
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define ll long long
- #define pi acos(-1.0)
- #define pii pair<int,int>
- #define Lson L, mid, rt<<1
- #define Rson mid+1, R, rt<<1|1
- const int maxn=1e5+;
- using namespace std;
- ll gcd(ll p,ll q){return q==?p:gcd(q,p%q);}
- ll qpow(ll p,ll q){ll f=;while(q){if(q&)f=f*p;p=p*p;q>>=;}return f;}
- int n,m,k;
- char op[];
- ll ans[];
- ll gao(int p)
- {
- return (ll)p*(p+)*(*p+)/;
- }
- struct Node
- {
- ll sum,sum1,sum2,lazy;
- } T[maxn<<];
- void PushUp(int rt)
- {
- T[rt].sum = T[rt<<].sum + T[rt<<|].sum;
- T[rt].sum1 = T[rt<<].sum1 + T[rt<<|].sum1;
- T[rt].sum2 = T[rt<<].sum2 + T[rt<<|].sum2;
- }
- void PushDown(int L, int R, int rt)
- {
- int mid = (L + R) >> ;
- ll t = T[rt].lazy;
- T[rt<<].sum += t * (mid - L + );
- T[rt<<|].sum += t * (R - mid);
- T[rt<<].sum1 += t * (mid - L + )*(mid + L)/;
- T[rt<<|].sum1 += t * (R - mid)*(R + mid +)/;
- T[rt<<].sum2 += t * (gao(mid)-gao(L-));
- T[rt<<|].sum2 += t * (gao(R)-gao(mid));
- T[rt<<].lazy += t;
- T[rt<<|].lazy += t;
- T[rt].lazy = ;
- }
- void Update(int l, int r, ll v, int L, int R, int rt)
- {
- if(l==L && r==R)
- {
- T[rt].lazy += v;
- T[rt].sum += v * (R - L + );
- T[rt].sum1 += v * (R - L + )*(R + L)/;
- T[rt].sum2 += v * (gao(R)-gao(L-));
- return ;
- }
- int mid = (L + R) >> ;
- if(T[rt].lazy) PushDown(L, R, rt);
- if(r <= mid) Update(l, r, v, Lson);
- else if(l > mid) Update(l, r, v, Rson);
- else
- {
- Update(l, mid, v, Lson);
- Update(mid+, r, v, Rson);
- }
- PushUp(rt);
- }
- void Query(int l, int r, int L, int R, int rt)
- {
- if(l==L && r== R)
- {
- ans[]+=T[rt].sum;
- ans[]+=T[rt].sum1;
- ans[]+=T[rt].sum2;
- return;
- }
- int mid = (L + R) >> ;
- if(T[rt].lazy) PushDown(L, R, rt);
- if(r <= mid) Query(l, r, Lson);
- else if(l > mid) Query(l, r, Rson);
- else Query(l, mid, Lson) , Query(mid + , r, Rson);
- }
- int main()
- {
- int i,j;
- scanf("%d%d",&n,&m);
- while(m--)
- {
- int a,b,c;
- scanf("%s",op);
- if(op[]=='c')
- {
- scanf("%d%d%d",&a,&b,&c);
- Update(a+,b,(ll)c,,n,);
- }
- else
- {
- scanf("%d%d",&a,&b);
- ans[]=ans[]=ans[]=;
- Query(a+,b,,n,);
- printf("%.10f\n",(double)(-ans[]+(a+b+)*ans[]-(a+(ll)a*b)*ans[])/(b-a)/(b-a+)*);
- }
- }
- //system("Pause");
- return ;
- }
ural1855 Trade Guilds of Erathia的更多相关文章
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Hdu 1009 FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- [题解]hdu 1009 FatMouse' Trade(贪心基础题)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
- ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)
题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...
- HDU 3401 Trade dp+单调队列优化
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)Mem ...
- 【HDU 1009】FatMouse' Trade
题 Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the ware ...
- hdu 1009:FatMouse' Trade(贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 杭电1009-FatMouse' Trade
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- 文本注释系统 + MarkDown
标记系统: 笔记的要点 题材 缘起 目标 等级: 细节性 事实性 规律 法则 适用范围: 时间.地点.人物.起因.经过.结果,who what where when why how whom 6W1H ...
- (响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
(响应式PC端媒体查询)电脑屏幕分辨率尺寸大全 时间:2015-08-17 16:50:40 阅读:3961 评论:0 收藏:0 [点我收藏+] 标签:styl ...
- HDU 5795 A Simple Nim
打表找SG函数规律. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> ...
- wmic应用实例
实例应用 1.磁盘管理 查看磁盘的属性 wmic logicaldisk list brief ::caption=标题.driveID=驱动器ID号.model=产品型号.Partitions=分区 ...
- 《JS权威指南学习总结--第三章类型、值和变量》
第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...
- .Net TransactionScope事务
使用TransactionScope类 正如名称所暗示,TransactionScope类用于限定事务代码块,其具有一些明显优点,例如范围与应用程序对象模型无关,同时提供了一个简单直观的编程模型等等. ...
- JSP基本语法--实例演练
基本语法概括:<%@page>,<%@include>,<jsp:include>,<jsp:forward> 加上数据库操作,可以开发动态web了. ...
- HTML+CSS D08浮动
1. <html> <head> <title>div浮动</title> <style type="text/css"> ...
- hdu5269 ZYB loves Xor I
分治法和字典树都可以,都是递归,但字典树耗内存 从第一bit开始,若相同则xor为0,分到同一部分,不相同则统计,且此时lowbit为这一bit,最后结果要乘以2 /*分治法*/ #include&l ...
- 解决编译时出现的警告:format string is not a string literal (potentially insecure)
NSLog([NSString stringWithFormat:@"%@/%@B.jpg", createDir, uuid]);//这是我的写法 应该写成 NSString * ...