当前位置:网站首页>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));
}
}
}
边栏推荐
- Recyclerview refreshes blinks and crashes when deleting items
- In XML layout, the button is always displayed on the top layer
- Sublime Text3 set to run your own makefile
- Introduction to intranet penetration tool FRP
- ORA-01950 对表空间无权限
- linux下centos7中mysql5.7安装教程
- kdevelop新建工程
- linux环境下安装配置redis,并设置开机自启动
- leetcode MYSQL数据库题目181
- Introduction to Chang'an chain data storage and construction of MySQL storage environment
猜你喜欢

Segmentation of Head and Neck Tumours Using Modified U-net

zabbix4.4配置监控服务器指标,以及图形页乱码解决

阿里云防火墙配置,多种设置方式(iptables和fireward)

Pipeline details of IPC (interprocess communication)

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

Custom MVC framework implementation
![[Huawei certification] the most complete and selected question bank in hcia-datacom history (with answer analysis)](/img/d4/f5ea847573433f7ca7bd429f57e40a.png)
[Huawei certification] the most complete and selected question bank in hcia-datacom history (with answer analysis)

Application of decorator mode, packaging ServletRequest and adding addparameter method

Fully Automated Gross Tumor Volume Delineation From PET in Head and Neck Cancer Using Deep Learning

How to traverse objects in the vector container
随机推荐
leetcode MYSQL数据库题目178
Data governance: the solution of data governance in the data Arena
2020-09-23左右值 右值引用 std::move()
Invalidconnectionattributeexception exception exception handling
Fully Automated Delineation of Gross Tumor Volume for Head and Neck Cancer on PET-CT Using Deep Lear
2020-09-18 referer认证 url转义
Automatic 3D Detection and Segmentation of Head and Neck Cancer from MRI Data.
Flutter 基础组件之 GridView
Fully Automated Gross Tumor Volume Delineation From PET in Head and Neck Cancer Using Deep Learning
leetcode MYSQL数据库题目176
JVM四种调用方法的指令
券商经理给的开户二维码办理股票开户安全吗?我想开个户
Surveiller l'utilisation du pool de connexion des sources de données
Wechat applet rewrites the page function to realize global logging
FreeRTOS (IX) - queue
微信小程序实现数据侦听器watch,包含销毁watch和子属性的watch
指针函数和函数指针
微信小程序重写Page函数,实现全局日志记录
Segmentation of Head and Neck Tumours Using Modified U-net
Segmentation of Head and Neck Tumours Using Modified U-net