Doom HDU - 5239 (找规律+线段树)
题目链接:
题目大意:首先是T组测试样例,然后n个数,m次询问,然后每一次询问给你一个区间,问你这个这段区间的加上上一次的和是多少,查询完之后,这段区间里面的每个数变为原来的平方。
具体思路:这个模数,和正常的模数不一样。
然后通过打表能发现,每个数不断自身平方对p取模后经过有限次 就不会变化了,
测试少于30次
所以也就是说每个节点至多会被更新30次。
注意会爆long long ,需要用unsigned long long .
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define inf 0x3f3f3f3f
# define ull unsigned long long
# define lson l,mid,rt<<
# define rson mid+,r,rt<<|
const int maxn = 4e5+;
const ull mod = ;
struct node
{
ull sum;
int flag;
} tree[maxn];
ull qsmu(ull t1,ull t2)
{
ull ans=0ll;
while(t2)
{
if(t2&)
ans=(ans+t1)%mod;
t2>>=;
t1=(t1+t1)%mod;
}
return ans;
}
ull tot;
void up(int rt)
{
tree[rt].sum=(tree[rt<<].sum+tree[rt<<|].sum)%mod;
tree[rt].flag=(tree[rt<<].flag&tree[rt<<|].flag);
}
void build(int l,int r,int rt)
{
tree[rt].flag=;
tree[rt].sum=;
if(l==r)
{
scanf("%lld",&tree[rt].sum);
return ;
}
int mid=l+r>>;
build(lson);
build(rson);
up(rt);
}
void update(int l,int r,int rt,int L,int R)
{
if(R<l||r<L||tree[rt].flag)
return ;
if(l==r)
{
ull tmp=tree[rt].sum;
tree[rt].sum=qsmu(tree[rt].sum,tree[rt].sum);
if(tmp==tree[rt].sum)
tree[rt].flag=;
return ;
}
int mid=(l+r)>>;
update(lson,L,R);update(rson,L,R);
up(rt);
}
void ask(int l,int r,int rt,int L,int R)
{
if(R<l||r<L)
return ;
if(L<=l&&R>=r)
{
tot=(tot+tree[rt].sum)%mod;
return ;
}
int mid=(l+r)>>;
ask(lson,L,R);ask(rson,L,R);
up(rt);
}
int main()
{
int T;
int Case=;
scanf("%d",&T);
while(T--)
{
tot=;
int m,n;
scanf("%d %d",&n,&m);
build(,n,);
printf("Case #%d:\n",++Case);
while(m--)
{
int l,r;
scanf("%d %d",&l,&r);
ask(,n,,l,r);
printf("%lld\n",tot);
update(,n,,l,r);
}
}
return ;
}
、
Doom HDU - 5239 (找规律+线段树)的更多相关文章
- 随机序列[SHOI2016](找规律+线段树)
传送门 这道题的题意就是给你n个数让你在每个数之间插入+.-.*三种运算符中的一种,然后算出一个答案,再把答案加起来. 这题肯定是不能暴力的(题目都告诉你了由3n-1种结果).我们先从小的情况枚举找一 ...
- A Simple Problem with Integers 循环节 修改 平方 找规律 线段树
A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- W - Doom HDU - 5239 线段树 找取模的规律+求一个很大的数的平方对一个数取模的写法 特别的模数==2^63-2^31
这个题目一开始感觉还是有点难的,这个模数这么大,根本就不知道怎么写,然后去搜了题解,知道了怎么去求当x很大的时候x的平方对一个数取模怎么样不会爆掉. 然后还顺便发现了一个规律就是当一个数更新一定次数之 ...
- hdu 3303 Harmony Forever (线段树 + 抽屉原理)
http://acm.hdu.edu.cn/showproblem.php?pid=3303 Harmony Forever Time Limit: 20000/10000 MS (Java/Othe ...
- HDU 6047 Maximum Sequence(线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- hdu 3397 Sequence operation (线段树 区间合并 多重标记)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意: 给你一串01串,有5种操作 0. 区间全部变为0 1.区间全部变为1 2.区间异或 3.询问 ...
- HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...
随机推荐
- Bloom Filter(布隆过滤器)如何解决缓存穿透
本文摘抄自我的微信公众号"程序员柯南",欢迎关注!原文阅读 缓存穿透是什么? 关于缓存穿透,简单来说就是系统处理了大量不存在的数据查询.正常的使用缓存流程大致是,数据查询先进行缓存 ...
- 我的Qt历程1:第一个Qt程序
1.启动Qt,按照红圈内所标注顺序执行操作. 2.按下Choose键后,在“名称”栏目里给程序起名字(不要是汉字名字). 3.在“创建路径”栏目里指定程序将要使用的路径(不能用汉字路径). 4.在“类 ...
- random使用方法
random.random() 没有参数,选择0到1之间的随机浮点数 random.uniform(a, b) 生成指定范围内的随机浮点数如果a.b哪个大那个小都没关系,生成的都是在小的与大的之间的随 ...
- 放下VS2010,拥抱VS2019
VS2019 再过几天就要正式发布了,我们还在使用 VS2010 进行软件开发.由于所处行业环境及项目类型,加之之前的代码积累,所以即使不用新的开发环境.新的语言技术也能比较好的完成工作.那究竟要不要 ...
- php函数 array_count_values
(PHP 4, PHP 5, PHP 7) array_count_values — 统计数组中所有的值 array_count_values ( array $array ) : array arr ...
- 巧妙使用excel 实现行转列
1. 本来想通过写sql的方式来实现简单的行转列 但是 时间要求很紧 (主要是自己懒 并且sql写的不好. ) 通过同事提醒 以及百度 找到一个很简单的方法,通过excel 来实现. 2. 具体操作步 ...
- MySQL性能优化神器—explain
一.explain是什么? 简单来讲就是官方给的一个优化工具,直接在你的SQL语句前加上explain,执行整条语句,之后你就可以根据执行结果优化你的SQL啦,废话不多说,直接刚实例 测试实例 1.创 ...
- Linux(Ubuntu)------常用命令汇总
文件 unzip -O cp936 file.zip unzip -O cp936 file.zip -d dir tar -zxvf file -C dir mv [-i ] file1 file2 ...
- <generatePublisherEvidence> 元素
<configuration> <runtime> <generatePublisherEvidence enabled="false"/> & ...
- Scrapy 框架简介
Scrapy 框架 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的 ...