K - Transformation
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define p 10007
#define MAXN 100010
using namespace std;
int n,m;
struct nond{
int l,r;
int sum[];
int flag1,flag2,flag3;
}tree[MAXN*];
void up(int now){
tree[now].sum[]=(tree[now*].sum[]+tree[now*+].sum[])%p;
tree[now].sum[]=(tree[now*].sum[]+tree[now*+].sum[])%p;
tree[now].sum[]=(tree[now*].sum[]+tree[now*+].sum[])%p;
}
void build(int now,int l,int r){
tree[now].l=l;tree[now].r=r;
tree[now].sum[]=;tree[now].sum[]=;
tree[now].sum[]=;tree[now].flag2=;
tree[now].flag1=tree[now].flag3=;
if(tree[now].l==tree[now].r) return ;
int mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
up(now);
}
void down(int now){
if(tree[now].flag3){
tree[now*].sum[]=(((tree[now*].r-tree[now*].l+)%p)*tree[now].flag3)%p;
tree[now*].sum[]=(((((tree[now*].r-tree[now*].l+)%p)*tree[now].flag3)%p)*tree[now].flag3)%p;
tree[now*].sum[]=(((((((tree[now*].r-tree[now*].l+)%p)*tree[now].flag3)%p)*tree[now].flag3)%p)*tree[now].flag3)%p;
tree[now*].flag3=tree[now].flag3%p;
tree[now*].flag1=;tree[now*].flag2=; tree[now*+].sum[]=(((tree[now*+].r-tree[now*+].l+)%p)*tree[now].flag3)%p;
tree[now*+].sum[]=(((((tree[now*+].r-tree[now*+].l+)%p)*tree[now].flag3)%p)*tree[now].flag3)%p;
tree[now*+].sum[]=(((((((tree[now*+].r-tree[now*+].l+)%p)*tree[now].flag3)%p)*tree[now].flag3)%p)*tree[now].flag3)%p;
tree[now*+].flag3=tree[now].flag3%p;
tree[now*+].flag1=;tree[now*+].flag2=; tree[now].flag3=;
}
if(tree[now].flag2){
tree[now*].sum[]=(((((tree[now*].sum[]*tree[now].flag2)%p)*tree[now].flag2)%p)*tree[now].flag2)%p;
tree[now*].sum[]=(((tree[now*].sum[]*tree[now].flag2)%p)*tree[now].flag2)%p;
tree[now*].sum[]=(tree[now*].sum[]*tree[now].flag2)%p;
tree[now*].flag1=(tree[now*].flag1*tree[now].flag2)%p;
tree[now*].flag2=(tree[now*].flag2*tree[now].flag2)%p; tree[now*+].sum[]=(((((tree[now*+].sum[]*tree[now].flag2)%p)*tree[now].flag2)%p)*tree[now].flag2)%p;
tree[now*+].sum[]=(((tree[now*+].sum[]*tree[now].flag2)%p)*tree[now].flag2)%p;
tree[now*+].sum[]=(tree[now*+].sum[]*tree[now].flag2)%p;
tree[now*+].flag1=(tree[now*+].flag1*tree[now].flag2)%p;
tree[now*+].flag2=(tree[now*+].flag2*tree[now].flag2)%p; tree[now].flag2=;
}
if(tree[now].flag1){
tree[now*].sum[]=(tree[now*].sum[]+(((*tree[now].flag1*tree[now].flag1%p*tree[now*].sum[])%p+(*tree[now].flag1*tree[now*].sum[])%p)%p+(tree[now*].r-tree[now*].l+)%p*tree[now].flag1%p*tree[now].flag1%p*tree[now].flag1)%p)%p;
tree[now*].sum[]=(tree[now*].sum[]+((tree[now*].r-tree[now*].l+)%p*tree[now].flag1%p*tree[now].flag1%p+(*tree[now].flag1*tree[now*].sum[])%p)%p)%p;
tree[now*].sum[]=(tree[now*].sum[]+(tree[now*].r-tree[now*].l+)%p*tree[now].flag1)%p;
tree[now*].flag1=(tree[now*].flag1+tree[now].flag1)%p; tree[now*+].sum[]=(tree[now*+].sum[]+(((*tree[now].flag1*tree[now].flag1%p*tree[now*+].sum[])%p+(*tree[now].flag1*tree[now*+].sum[])%p)%p+(tree[now*+].r-tree[now*+].l+)%p*tree[now].flag1%p*tree[now].flag1%p*tree[now].flag1)%p)%p;
tree[now*+].sum[]=(tree[now*+].sum[]+((tree[now*+].r-tree[now*+].l+)%p*tree[now].flag1%p*tree[now].flag1%p+(*tree[now].flag1*tree[now*+].sum[])%p)%p)%p;
tree[now*+].sum[]=(tree[now*+].sum[]+(tree[now*+].r-tree[now*+].l+)%p*tree[now].flag1)%p;
tree[now*+].flag1=(tree[now*+].flag1+tree[now].flag1)%p; tree[now].flag1=;
}
}
void changeadd(int now,int l,int r,int k){
if(tree[now].l==l&&tree[now].r==r){
tree[now].sum[]=(tree[now].sum[]+(((*k*k%p*tree[now].sum[])%p+(*k*tree[now].sum[])%p)%p+(tree[now].r-tree[now].l+)%p*k%p*k%p*k)%p)%p;
tree[now].sum[]=(tree[now].sum[]+(((((tree[now].r-tree[now].l+)%p)*k)%p*k)%p+(*k*tree[now].sum[])%p)%p)%p;
tree[now].sum[]=(tree[now].sum[]+(tree[now].r-tree[now].l+)%p*k)%p;
tree[now].flag1=(tree[now].flag1+k)%p;
return ;
}
if(tree[now].flag1||tree[now].flag2!=||tree[now].flag3) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) changeadd(now*,l,r,k);
else if(l>mid) changeadd(now*+,l,r,k);
else { changeadd(now*,l,mid,k); changeadd(now*+,mid+,r,k); }
up(now);
}
void changemul(int now,int l,int r,int k){
if(tree[now].l==l&&tree[now].r==r){
tree[now].sum[]=(((((tree[now].sum[]*k)%p)*k)%p)*k)%p;
tree[now].sum[]=(((tree[now].sum[]*k)%p)*k)%p;
tree[now].sum[]=(tree[now].sum[]*k)%p;
tree[now].flag1=(tree[now].flag1*k)%p;
tree[now].flag2=(tree[now].flag2*k)%p;
return ;
}
if(tree[now].flag1||tree[now].flag2!=||tree[now].flag3) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) changemul(now*,l,r,k);
else if(l>mid) changemul(now*+,l,r,k);
else{ changemul(now*,l,mid,k); changemul(now*+,mid+,r,k); }
up(now);
}
void change(int now,int l,int r,int k){
if(tree[now].l==l&&tree[now].r==r){
tree[now].sum[]=(((tree[now].r-tree[now].l+)%p)*k)%p;
tree[now].sum[]=(((((tree[now].r-tree[now].l+)%p)*k)%p)*k)%p;
tree[now].sum[]=(((((((tree[now].r-tree[now].l+)%p)*k)%p)*k)%p)*k)%p;
tree[now].flag3=k%p;
tree[now].flag1=;tree[now].flag2=;
return ;
}
if(tree[now].flag1||tree[now].flag2!=||tree[now].flag3) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) change(now*,l,r,k);
else if(l>mid) change(now*+,l,r,k);
else{ change(now*,l,mid,k); change(now*+,mid+,r,k); }
up(now);
}
int query(int now,int l,int r,int k){
if(tree[now].l==l&&tree[now].r==r)
return tree[now].sum[k];
if(tree[now].flag1||tree[now].flag2!=||tree[now].flag3) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) return query(now*,l,r,k);
else if(l>mid) return query(now*+,l,r,k);
else return (query(now*,l,mid,k)+query(now*+,mid+,r,k))%p;
}
int main(){
while(scanf("%d%d",&n,&m)&&n!=&&m!=){
build(,,n);
for(int i=;i<=m;i++){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a==) changeadd(,b,c,d);
if(a==) changemul(,b,c,d);
if(a==) change(,b,c,d);
if(a==) printf("%d\n",query(,b,c,d));
}
}
}
K - Transformation的更多相关文章
- K - Transformation HDU - 4578 线段树经典题(好题)
题意:区间 加 变成定值 乘 区间查询:和 平方和 立方和 思路:超级超级超级麻烦的一道题 设3个Lazy 标记分别为 change 改变mul乘 add加 优先度change>m ...
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
- (七)Transformation和action详解-Java&Python版Spark
Transformation和action详解 视频教程: 1.优酷 2.YouTube 什么是算子 算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作. 算子分类: 具体: 1.Value ...
- hdu4952 Number Transformation (找规律)
2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...
- spark transformation与action操作函数
一.Transformation map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成 filter(func) 返回一个新的数据集,经过fun函数处理后返回值为tru ...
- HDU 1041 Computer Transformation (简单大数)
Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...
- HDU P4578 Transformation
Problem Description Yuanfang is puzzled with the question below: There are n integers, a1, a2, …, an ...
- bzoj 3858: Number Transformation 暴力
3858: Number Transformation Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 82 Solved: 41[Submit][Sta ...
- HDU-4952 Number Transformation
http://acm.hdu.edu.cn/showproblem.php?pid=4952 Number Transformation Time Limit: 2000/1000 MS (Java/ ...
随机推荐
- bzoj4004 [JLOI2015]装备购买——线性基+贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4004 今天讲课讲到的题,据说满足拟阵的性质,所以贪心是正确的: 总之就贪心,按价格从小到大排 ...
- Coursera Algorithms week2 基础排序 练习测验: Permutation
题目原文: Given two integer arrays of size n , design a subquadratic algorithm to determine whether one ...
- 10.3.3 WebView的几个常见功能
(1)背景设置,例如下面的代码. webView.setBackgroundColor(0);//先设置背景色为transparent webView.setBackgroundResource(R. ...
- Shuffle'm Up(串)
http://poj.org/problem?id=3087 题意:每组3个串,前两个串长度为n,第三个串长度为2*n,依次从第二个串(s2)中取一个字符,从第一个串(s1)中取一个字符,...... ...
- mysql出错代码
1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目 ...
- Java调用JavaWebService
1.pom配置 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...
- Spring学习笔记之aop动态代理(3)
Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...
- Android6.0以上版本获取本机蓝牙地址
Android6.0以上版本使用BluetoothAdapter.getDefaultAdapter().getAddress()是获取不到正确的蓝牙地址的,返回的值都是02:00:00:00:00: ...
- OpenCV实现灰度直方图和直方图拉伸
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...
- C++对象的内存模型
1. 普通对象模型 对象是如何在内存中布局的? 成员 存放位置 访问范围 非静态数据成员 每一个对象体内 为该对象专有 静态数据成员 程序的静态存储区内,只有一份实体 为该类所有对象共享 成员函数(静 ...