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) ...
随机推荐
- MySQL在windows上多次安装失败
Mysql首次安装: 1.官网下载mysql安装包 2.安装选择自定义,custom 3.更换路径,然后按需求选择,选择标准就行 Mysql重复安装需要注意的问题: 1.程序和功能下,需要卸载MySQ ...
- vue项目接口域名动态获取
需求: 接口域名是从外部 .json 文件里获取的. 思路: 在开始加载项目前 进行接口域名获取,然后重置 接口域名的配置项. 实现: 1.config/index.js 文件 进行基础配置 impo ...
- Python----数据预处理
导入标准库 import numpy as np import matplotlib.pyplot as plt import pandas as pd 导入数据集 dataset = pd.read ...
- ES6 Promise 用法讲解
Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...
- Flutter内置ICON
由于有时打不开flutter的icon官网 https://material.io/tools/icons/?style=baseline 截图存下icon 如果看不清 Ctrl + 恢复Ctr ...
- 内核调试打印dump_stack
https://blog.csdn.net/dragon101788/article/details/9419175 在函数中加入dump_stack函数 需要包含的头文件: #include < ...
- 熟悉常用的HDFS操作
编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同任务: 在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件txt,里面可以随意输入一些单词. 在本地查看文件 ...
- 2018年第九届蓝桥杯题目(C/C++B组)汇总
第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解题思路: 1. 判断2月有几天, ...
- Java 中数字和字符串拼接的问题
注意细节 字符是char 类型,字符串是String 类型1.数字拼接char,得到的还是数字,相当于和它的ASCII编码相加(如果定义成String 会编译错误)2.数字拼接String,得到的是S ...
- ios端position为fixed失效的解决办法
关键代码 document.getElementById("searchInputbox").addEventListener('touchmove', handler, {pas ...