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 ...
随机推荐
- UWP DEP0700: 应用程序注册失败。[0x80073CF9] 另一个用户已安装此应用的未打包版本。当前用户无法将该版本替换为打包版本。
最近电脑抽风,我在[应用程序和功能]中重置了以下我的App自然灾害,居然,搞出大新闻了. 它居然从列表中消失了... vs再次编译代码的时候,提示 严重性 代码 说明 项目 文件 行 禁止显示状态 错 ...
- RegExp正则匹配模式汇总
正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法.对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexO ...
- 2018年美国大学生数学建模竞赛(MCM/ICM) E题解题思路
任务一就是让大家去做个基本的评价,是典型的评价类问题,所以应该按照 指标+方法的步骤去做,首先就是寻找国家脆弱性的相关概念,然后选择影响国 家脆弱性的指标,如气候变化,经济发展,政治状况等等,再就是构 ...
- Xming 多屏选项
最早接触xming是从GrADS软件弹出的那个窗口开始的.到后来发现它是一个显示图形界面的软件,设置multiwindow 选项,xshell+xming连远程服务器,屡试不爽.随着设备升级,用上了双 ...
- 查找linux镜像源中的软件版本并进行安装
输入以下代码进行软件查找 sudo apt-cache search YourSoftwareName 根据所得到的结果进行安装 sudo apt-get install YourSoftwareNa ...
- Unity特殊文件夹详解
##1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫Editor ...
- UnityEditor扩展-Shader浏览器
1. 用途 用于浏览项目所有Shader被使用的情况 2. 界面说明 Ignore Directory:添加不搜索的文件夹,不添加默认搜索全部 Find按钮:开始搜索 Used Shaders:已被使 ...
- IO多路复用多并发服务器模板
import socket import selectors # IO多路复用选择器 epoll_selector = selectors.EpollSelector() # 实例化选择器 serve ...
- 高可用OpenStack(Queen版)集群-15.Glance&Cinder集成Ceph
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- Java 内存模型_1
title: Java 内存模型_1 date: 2017-01-15 17:11:02 tags: [JMM] categories: [Programming,Java] --- 概述 本文记录 ...