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 ...
随机推荐
- PLSQL Developer 客户端没有TNS监听,无法连接数据库
在Windows Server 2008 中安装了 64位的Oracle,好不容易将监听做好,在使用客户端 PLSQL Developer 的时候发现竟然没有TNS监听. 问题如下: 如上图所示,打开 ...
- java多线程的简单demo
模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...
- (转)js数组与字符串的相互转换方法
一.数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 二 ...
- senlenium使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Linux命令应用大词典-第1章 登录、退出、关机和重启
1.1 login:用户登录系统 1.2 logout:退出登录shell 1.3 nologin:限制用户登录 1.4 exit:退出shell 1.5 sulogin:单用户登录(single u ...
- Eclipse Photon没有Server选项的问题
安装Eclipse Photon版本的时候选择了Java开发,导致最后需要本地tomcat调试的时候找不到Server配置选项. ①在软件eclipse下的Help->InstallNew So ...
- Socket之简单的Unity3D聊天室__TCP协议
服务器端程序 using System; using System.Collections.Generic; using System.Linq; using System.Net; using Sy ...
- hover时显示可跟随鼠标移动的浮动框,运用函数节流与去抖进行优化
在很多笔试面试题中总能看到js函数去抖和函数节流,看过很多关于这两者的讨论,最近终于在一个需求中使用了函数去抖(debounce)和函数节流(throttle). 需要完成的效果是,鼠标在表格的单元格 ...
- SICP读书笔记 2.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- EF多个上下文迁移
步骤: 1. Enable-Migrations 2. add-migration Initial -ConfigurationTypeName ModelOneDbConfig 3. update- ...