当前位置:网站首页>HDU 4578 Transformation(线段树+有技巧的懒标记下放)
HDU 4578 Transformation(线段树+有技巧的懒标记下放)
2022-06-29 09:17:00 【叶卡捷琳娜2号】
Yuanfang is puzzled with the question below:
There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations.
Operation 1: Add c to each number between a x and a y inclusive. In other words, do transformation a k<—a k+c, k = x,x+1,…,y.
Operation 2: Multiply c to each number between a x and a y inclusive. In other words, do transformation a k<—a k×c, k = x,x+1,…,y.
Operation 3: Change the numbers between a x and a y to c, inclusive. In other words, do transformation a k<—c, k = x,x+1,…,y.
Operation 4: Get the sum of p power among the numbers between a x and a y inclusive. In other words, get the result of a x p+a x+1 p+…+a y p.
Yuanfang has no idea of how to do it. So he wants to ask you to help him.
Input
There are no more than 10 test cases.
For each case, the first line contains two numbers n and m, meaning that there are n integers and m operations. 1 <= n, m <= 100,000.
Each the following m lines contains an operation. Operation 1 to 3 is in this format: “1 x y c” or “2 x y c” or “3 x y c”. Operation 4 is in this format: “4 x y p”. (1 <= x <= y <= n, 1 <= c <= 10,000, 1 <= p <= 3)
The input ends with 0 0.
Output
For each operation 4, output a single integer in one line representing the result. The answer may be quite large. You just need to calculate the remainder of the answer when divided by 10007.
Sample Input
5 5
3 3 5 7
1 2 4 4
4 1 5 2
2 2 5 8
4 3 5 3
0 0
Sample Output
307
7489
解题思路:
要是按照直接记录的放法,这个题的懒标记肯定非常复杂,但是这个题的时间给了8秒,数据也很特别,起始数据都为0。现在我们每次更改过后,那段区间的值也应该是相同的,所以,我们直接可以计算一段区间相同的数的操作的和,
sum=(r-l+1)*a[rt]^p;注意:每次更新和求和时都应该要注意懒标记。
代码:
#include <iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<stack>
#include<string>
const int maxn=1e5+5;
const int mod=10007;
const int inf=1e9;
const long long onf=1e18;
#define me(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&(-x)
#define lson p*2,l,mid
#define rson p*2+1,mid+1,r
#define PI 3.14159265358979323846
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int n,m;
struct segmenttree{
int l,r;
int dat,lasy;
}t[maxn<<2];
void pushup(int p){
if(!t[p*2].lasy||!t[p*2+1].lasy)
t[p].lasy=0;
else if(t[p*2].dat!=t[p*2+1].dat)
t[p].lasy=0;
else {
t[p].dat=t[p*2].dat=t[p*2+1].dat;
t[p].lasy=1;
}
}
void pushdown(int p){
if(t[p].lasy){
t[p*2].lasy=t[p*2+1].lasy=1;
t[p*2].dat=t[p*2+1].dat=t[p].dat;
t[p].lasy=0;
}
}
void build(int p,int l,int r){
t[p].l=l,t[p].r=r;
if(l==r){
t[p].dat=0,t[p].lasy=1;
return ;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
pushup(p);
}
void change(int p,int l,int r,int op,int c){
if(l<=t[p].l&&r>=t[p].r&&t[p].lasy){
if(op==1) t[p].dat=(t[p].dat+c)%mod;
if(op==2) t[p].dat=(t[p].dat*c)%mod;
if(op==3) t[p].dat=c%mod;
return ;
}
pushdown(p);
int mid=(t[p].l+t[p].r)>>1;
if(l<=mid) change(p*2,l,r,op,c);
if(r>mid) change(p*2+1,l,r,op,c);
pushup(p);
}
int ask(int p,int l,int r,int x){
if(l<=t[p].l&&r>=t[p].r&&t[p].lasy)
{ int ans=1;
for(int i=1;i<=x;i++)
ans=(ans*t[p].dat)%mod;
ans=(ans*(t[p].r-t[p].l+1))%mod;
return ans;
}
int mid=(t[p].l+t[p].r)>>1;
pushdown(p);
int ans=0;
if(l<=mid) ans=(ans+ask(p*2,l,r,x))%mod;
if(r>mid) ans=(ans+ask(p*2+1,l,r,x))%mod;
return ans%mod;
}
int main()
{ while(~scanf("%d %d",&n,&m),n+n){
build(1,1,n);
int p,x,y,z;
for(int i=1;i<=m;i++){
scanf("%d %d %d %d",&p,&x,&y,&z);
if(p<=3)change(1,x,y,p,z);
else printf("%d\n",ask(1,x,y,z));
}
}
}
边栏推荐
- Data governance: Metadata Management (Part 2)
- JVM四种调用方法的指令
- 微信小程序实现数据侦听器watch,包含销毁watch和子属性的watch
- 2020-9-14 广告系统入门
- IDEA自动补全
- The collapsing "2.3 * 10 = 22" produced by multiplying float and int
- 2020-09-25 boost库的noncopyable,用于单例模式
- Surveiller l'utilisation du pool de connexion des sources de données
- C语言中通过sprintf()函数构造sql语句
- Perfect binary tree, complete binary tree, perfect binary tree
猜你喜欢

linux环境下安装配置redis,并设置开机自启动

JVM之方法的绑定机制

A 3D Dual Path U-Net of Cancer Segmentation Based on MRI

完美二叉树、完全二叉树、完满二叉树

RecyclerView 通用适配器封装

Custom MVC framework implementation

Fully Automated Delineation of Gross Tumor Volume for Head and Neck Cancer on PET-CT Using Deep Lear

另类实现 ScrollView 下拉头部放大

How to traverse objects in the vector container

阿里云防火墙配置,多种设置方式(iptables和fireward)
随机推荐
GCC and makefile
遍历vector容器中的对象的方式
setInterval、setTimeout和requestAnimationFrame
语言特性
Cisco ASA、FTD和HyperFlex HX的漏洞分析复现
leetcode MYSQL数据库题目176
linux环境下安装配置redis,并设置开机自启动
Leetcode MySQL database topic 181
Cloud management platform: 9 open source cloud management platforms (CMP)
Invalidconnectionattributeexception exception exception handling
2020-09-18 referer认证 url转义
[technology development] development and design of alcohol tester solution
Lc236. nearest common ancestor of binary tree
券商经理给的开户二维码办理股票开户安全吗?我想开个户
Surveiller l'utilisation du pool de connexion des sources de données
JVM之 MinorGC、 MajorGC、 FullGC、
Introduction to intranet penetration tool FRP
JVM之对象的内存布局
Data governance: the solution of data governance in the data Arena
2020-09-21 Visual Studio头文件和库目录配置