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 ...
随机推荐
- 使用 Python+Selenium 破解滑块验证码
开发工具 Python版本:3.6.4 相关模块: pillow模块: selenium模块: numpy模块: 以及一些Python自带的模块. 其他: chromedriver 环境搭建 安装 ...
- Asp.Net Form验证不通过,重复登录(.net4,4.5form验证兼容性问题)
问题产生根源: 当然,其实应该需要保持线上所有机器环境一致!可是,写了一个小程序.使用的是4.5,aysnc/await实在太好用了,真心不想把代码修改回去. so,动了念头,在这台服务器上装个4.5 ...
- nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现
nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...
- Jenkins服务器维护
Jenkins服务器维护 以下是一些基本的活动,一些是对 Jenkins 服务器维护的最佳实践 URL选项 在 Jenkins 实例 URL 有以下命令将开展对Jenkins实例的相关动作. http ...
- 【LeetCode算法题库】Day2:Median of Two Sorted Arrays & Longest Palindromic Substring & ZigZag Conversion
[Q4] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...
- Docker 私有仓库方案比较与搭建
我们知道docker镜像可以托管到dockerhub中,跟代码库托管到github是一个道理.但如果我们不想把docker镜像公开放到dockerhub中,只想在部门或团队内部共享docker镜像,能 ...
- Codeforces Round #524 (Div. 2) C. Masha and two friends(矩形相交)
C. Masha and two friends time limit per test 1 second memory limit per test 256 megabytes input stan ...
- mkfs命令详解
mkfs命令-->make filesystem的缩写:用来在特定的分区建立Linux文件系统 [命令作用] 该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ex ...
- PC端上必应词典与金山词霸的测评分析
1. 介绍 随着英语学习越来越普及,基本上现在每位大学生的电脑上都会有一款便捷的英语查词软件,这次我们团队选择测评的 是微软必应词典(3.5.0.4311)和金山词霸(2014.05.16.044) ...
- Scrum Meeting 11.06
成员 今日任务 明日计划 用时 徐越 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 继续修改前端代码.完善数据库 4h 赵庶宏 构建后端数据库,进行完善 ...