UVALive6443_Alien Abduction Again
题意为给你若干个三次函数,以及每一个函数所分布的区间,由于每个函数的所有的系数都是整数,所以最后的函数在整数点处的值也是整数。
现在每次可以插入函数或者询问区间,现在要求每次询问区间后,所有的函数在这个区间的函数值的和。
其实一个函数在这个区间的分布,就可以看成是四个函数分别在这个区间分布了。
这样对于单一的函数,我们可以用线段树来维护了,每次查询和更新的操作都是在O(log(n))的复杂度内实现的。
注意不要写挫,另注:UVA的服务器真的很快,果断赞啊。
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1000100
#define M 1000000007
typedef long long ll;
using namespace std; ll f[][maxn],ans;
ll n,m,l0,r0,x3,x2,x1,x0,l1,R1,R2;
char s[]; void mod(ll& ppp) { if (ppp<) ppp+=M; } ll get(ll id ,ll pos)
{
if (pos<) return ;
return f[id][pos];
} struct tree{
ll col[*maxn+],sum[*maxn+];
void PushDown(ll rt,ll l,ll r,ll id)
{
if (col[rt]==) return;
ll mid=(l+r)/;
sum[*rt]+=col[rt]*(f[id][mid]-get(id,l-));
sum[*rt+]+=col[rt]*(f[id][r]-get(id,mid));
sum[*rt]%=M,sum[*rt+]%=M;
col[*rt]+=col[rt],col[*rt+]+=col[rt];
col[*rt]%=M,col[*rt+]%=M;
mod(col[*rt]),mod(col[*rt+]);
mod(sum[*rt]),mod(sum[*rt+]);
col[rt]=;
} void update(ll rt,ll l,ll r,ll L,ll R,ll id,ll v)
{
if (L<=l && R>=r)
{
col[rt]+=v;
sum[rt]+=v*(f[id][r]-get(id,l-));
col[rt]%=M,sum[rt]%=M;
mod(col[rt]),mod(sum[rt]);
return;
}
PushDown(rt,l,r,id);
ll mid=(l+r)>>;
if (L<=mid) update(*rt,l,mid,L,R,id,v);
if (R> mid) update(*rt+,mid+,r,L,R,id,v);
sum[rt]=(sum[*rt]+sum[*rt+])%M;
mod(sum[rt]);
} ll query(ll rt,ll l,ll r,ll L,ll R,ll id)
{
if (L<=l && R>=r) return sum[rt];
PushDown(rt,l,r,id);
ll mid=(l+r)/;
ll tot=;
if (L<=mid) tot=query(*rt,l,mid,L,R,id);
if (R> mid) tot+=query(*rt+,mid+,r,L,R,id);
return tot%M;
}
}t[]; ll power(ll x,ll y)
{
ll tot=;
while (y)
{
if (y&) tot=(tot*x)%M;
x=(x*x)%M;
y>>=;
}
return tot;
} void init_f()
{
f[][]=;
for (ll i=; i<; i++)
{
for (ll j=; j<maxn; j++)
f[i][j]=(f[i][j-]+power(j,i))%M;
}
} void init_tree()
{
for (ll i=; i<; i++)
{
memset(t[i].col,,sizeof t[i].col);
memset(t[i].sum,,sizeof t[i].sum);
}
} int main()
{
init_f();
ll T,cas=;
scanf("%lld",&T);
while (T--)
{
printf("Case #%lld:\n",++cas);
init_tree();
scanf("%lld",&n);
while (n--)
{
scanf("%s",s);
if (s[]=='p')
{
scanf("%lld%lld%lld%lld%lld%lld",&l0,&r0,&x3,&x2,&x1,&x0);
t[].update(,,maxn,l0,r0,,x3);
t[].update(,,maxn,l0,r0,,x2);
t[].update(,,maxn,l0,r0,,x1);
t[].update(,,maxn,l0,r0,,x0);
}
else if (s[]=='t')
{
scanf("%lld%lld%lld%lld%lld%lld",&l0,&r0,&x3,&x2,&x1,&x0);
ans=;
ans+=t[].query(,,maxn,l0,r0,),mod(ans);
ans%=M;
ans+=t[].query(,,maxn,l0,r0,),mod(ans);
ans%=M;
ans+=t[].query(,,maxn,l0,r0,),mod(ans);
ans%=M;
ans+=t[].query(,,maxn,l0,r0,),mod(ans);
ans%=M;
printf("%lld\n",ans);
R1=(ans*l0)%;
R2=(ans*r0)%;
l0=min(R1,R2),r0=max(R1,R2);
t[].update(,,maxn,l0,r0,,x3);
t[].update(,,maxn,l0,r0,,x2);
t[].update(,,maxn,l0,r0,,x1);
t[].update(,,maxn,l0,r0,,x0);
}
}
}
return ;
}
UVALive6443_Alien Abduction Again的更多相关文章
- Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 离线+分块
题目链接: http://codeforces.com/contest/103/problem/D D. Time to Raid Cowavans time limit per test:4 sec ...
- MapReduce的C#实现及单元测试(试验)
MapReduce.cs类文件代码 MapReduce的执行方法 using System; using System.Collections.Generic; //using System.Lin ...
- Regionals 2012, Asia - Jakarta 解题报告
啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...
- Katy Perry - E.T.
作曲 : Katy Perry, Łukasz Gottwald, Max Martin, Joshua Coleman 作词 : Katy Perry, Łukasz Gottwald, Max M ...
- (17)Questioning the universe
https://www.ted.com/talks/stephen_hawking_asks_big_questions_about_the_universe/transcript00:13There ...
- PGM学习之四 Factor,Reasoning
通过上一篇文章的介绍,我们已经基本了解了:Factor是组成PGM模型的基本要素:Factor之间的运算和推理是构建高维复杂PGM模型的基础.那么接下来,我们将重点理解,Factor之间的推理(Rea ...
- Firefox必备的24款web开发插件
from: 软件过滤: 排序:收录时间 | 浏览数 网页开发FireFox插件 Firebug Firebug是Firefox下的一款开发类插件,现属于Firefox的 五星级强力推荐插件之一.它集H ...
- 分治思想 特别常用 Codeforces Beta Round #80 (Div. 1 Only) D
D. Time to Raid Cowavans time limit per test 4 seconds memory limit per test 70 megabytes input stan ...
- Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 分块
D. Turtles Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/103/problem/D ...
随机推荐
- 菜鸟vimer成长记——第4.2章、编程插件
简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...
- HTML5--details活学活用
这是补充HTML5基础知识的系列内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四. ...
- hdu2844Coins(多重背包模板)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- load和loads的区别
相同点 load 和loads 都是实现"反序列化" 区别 1.loads loads针对内存对象 loads: 将 字符串 转换为 字典 # 这是一个字符串'{"b&q ...
- 《python 经典实例》 分享 pdf下载
链接:https://pan.baidu.com/s/1FzSsBfynqx5ll_OpcZGDHg提取码:ykgk
- selenium的基本定位方式总结
Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...
- 路由器终端常用linux命令汇总(持续更新)
ls:显示文件名与相关属性 ls -al;ls -l;ls -a 第一列: d:表示目录,dir. -:表示文件. l:表示链接文件,linkfile. 接下来的字符三个为一组,且均为rwx这3个字母 ...
- 温习DL之一:梯度的概念
1.梯度的概念 梯度是一个矢量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快. 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写 ...
- kali获得windows的shell后乱码
输入 chcp 65001
- UIWebView控件中 字体大小和字体样式的修改
修改UIWebView控件中字体的样式: NSString *htmlString = [NSString stringWithContentsOfFile:self.webPath encoding ...