思路:发现自己的错误竟然是zz般的少了一个取模   ε=ε=ε=(#>д<)ノ
#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的更多相关文章

  1. K - Transformation HDU - 4578 线段树经典题(好题)

    题意:区间  加   变成定值 乘  区间查询:和 平方和 立方和 思路:超级超级超级麻烦的一道题  设3个Lazy 标记分别为  change 改变mul乘 add加  优先度change>m ...

  2. django模型操作

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表        

  3. (七)Transformation和action详解-Java&Python版Spark

    Transformation和action详解 视频教程: 1.优酷 2.YouTube 什么是算子 算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作. 算子分类: 具体: 1.Value ...

  4. hdu4952 Number Transformation (找规律)

    2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...

  5. spark transformation与action操作函数

    一.Transformation map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成 filter(func) 返回一个新的数据集,经过fun函数处理后返回值为tru ...

  6. HDU 1041 Computer Transformation (简单大数)

    Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...

  7. HDU P4578 Transformation

    Problem Description Yuanfang is puzzled with the question below: There are n integers, a1, a2, …, an ...

  8. bzoj 3858: Number Transformation 暴力

    3858: Number Transformation Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 82  Solved: 41[Submit][Sta ...

  9. HDU-4952 Number Transformation

    http://acm.hdu.edu.cn/showproblem.php?pid=4952 Number Transformation Time Limit: 2000/1000 MS (Java/ ...

随机推荐

  1. iOS开发之KVC全解

    一  KVC的基本概念 1.KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过g ...

  2. git的使用(转)

    git 配置文件 git的配置文件位置针对所有用户:/etc/gitconfig针对当前用户: -/.gitconfig 查看配置的方法 git config --list 修改配置的方法 git c ...

  3. linux下安装rabbitmq以及在spring中进行集成

    ### 一.安装erlang 1. yum install ncurses-devel 2. ./configure --prefix=/usr/local/erlang20 --without-ja ...

  4. 原生JS---5

    原生js学习笔记5——BOM操作 什么是BOM BOM:Browser Object Model 是浏览器对象模型,浏览器对象模型提供了独立与内容的.可以与浏览器窗口进行互动的对象结构,BOM由多个对 ...

  5. ReverseEngineerCodeFirst 自定义模板

    1.在你要生成的项目里面在根目录下面添加CodeTemplates文件夹,并在该文件夹下面创建子文件夹ReverseEngineerCodeFirst 2.在ReverseEngineerCodeFi ...

  6. 优先队列 + 并查集 + 字典树 + 欧拉回路 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线

    这里给出基本思想和实现代码 . 优先队列 : 曾经做过的一道例题       坦克大战 struct node { int x,y,step; friend bool operator <(no ...

  7. 【HTTP】长连接和短连接

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

  8. java与安卓中的回调callback学习笔记

    1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...

  9. Azure Service Bus

    Azure Service Bus  是类似Rabbit的一个队列的应用. 找了两个基本的教程 First(但是这个,没有写怎么去链接账户)  Sec:这个有   Third(讲的也很好) Windo ...

  10. Deutsch lernen (11)

    1. anwesend a. 出席的,在场的 ~ abwesend Es waren gegen 50 Leute anwesend. 2. gespannt a. (心情)急切的,急于想知道的:紧张 ...