题意为给你若干个三次函数,以及每一个函数所分布的区间,由于每个函数的所有的系数都是整数,所以最后的函数在整数点处的值也是整数。

现在每次可以插入函数或者询问区间,现在要求每次询问区间后,所有的函数在这个区间的函数值的和。

其实一个函数在这个区间的分布,就可以看成是四个函数分别在这个区间分布了。

这样对于单一的函数,我们可以用线段树来维护了,每次查询和更新的操作都是在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的更多相关文章

  1. 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 ...

  2. MapReduce的C#实现及单元测试(试验)

    MapReduce.cs类文件代码  MapReduce的执行方法 using System; using System.Collections.Generic; //using System.Lin ...

  3. Regionals 2012, Asia - Jakarta 解题报告

    啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...

  4. Katy Perry - E.T.

    作曲 : Katy Perry, Łukasz Gottwald, Max Martin, Joshua Coleman 作词 : Katy Perry, Łukasz Gottwald, Max M ...

  5. (17)Questioning the universe

    https://www.ted.com/talks/stephen_hawking_asks_big_questions_about_the_universe/transcript00:13There ...

  6. PGM学习之四 Factor,Reasoning

    通过上一篇文章的介绍,我们已经基本了解了:Factor是组成PGM模型的基本要素:Factor之间的运算和推理是构建高维复杂PGM模型的基础.那么接下来,我们将重点理解,Factor之间的推理(Rea ...

  7. Firefox必备的24款web开发插件

    from: 软件过滤: 排序:收录时间 | 浏览数 网页开发FireFox插件 Firebug Firebug是Firefox下的一款开发类插件,现属于Firefox的 五星级强力推荐插件之一.它集H ...

  8. 分治思想 特别常用 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 ...

  9. 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 ...

随机推荐

  1. AgileRepository - 一个基于接口的Repository快速开发库

    AgileRepository 这是一个可以帮助你快速开发Repository的lib.有点像SpringData JPA根据方法名.注解来自动生成查询方法的功能. 对于一些简单的查询,只需要定义接口 ...

  2. VBA_话费明细单_格式调整

    VBA-联通话费明细单-格式调整 Sub ChangeColumn() Rows(1).RowHeight = 24 '设置第1行的行高 Rows(1).WrapText = True '设置第1行的 ...

  3. Mysql试题集锦

    1.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 1 ...

  4. 基于C#的机器学习--贝叶斯定理-执行数据分析解决肇事逃逸之谜

    贝叶斯定理-执行数据分析解决肇事逃逸之谜 ​ 在这一章中,我们将: 应用著名的贝叶斯定理来解决计算机科学中的一个非常著名的问题. 向您展示如何使用贝叶斯定理和朴素贝叶斯来绘制数据,从真值表中发现异常值 ...

  5. last命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/jerry_1126/article/details/54427119 [root@xiaoma /root] test!# ...

  6. win10浏览器访问vmware中ubuntu开启的某个服务端口出现的问题

    问题描述 1. win10系统中浏览器能正常访问  ubuntu中nginx服务器的80端口, 但是不能访问8082 问题原因 ubuntu 防火墙默认没有启用 8082端口, 需要开启这个端口号 解 ...

  7. Currency Exchange 货币兑换 Bellman-Ford SPFA 判正权回路

    Description Several currency exchange points are working in our city. Let us suppose that each point ...

  8. 互评Alpha版本—SkyHunter

    1.根据NABCD评论作品:   N(Need,需求):飞机大战题材的游戏对80,90后的人来说算是童年的记忆,可以在闲暇之余打开电脑玩一会儿.但是面向初中生,高中生的话这种PC小游戏可能不会那么适合 ...

  9. 20162328蔡文琛 week11 大二

    20162328 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 在无向图中,表示边的顶点对是无序的. 如果图中的两个顶点之间有边链接,则称它们是领接的. ...

  10. SQL语句联表查询

    Natural join:字段名和数据类型相同字段进行等值连接: inner join:与join相同,把符合条件的元组选出来,创建视图时用的即是inner join: left join:左表全选出 ...