MiYu原创, 转帖请注明 : 转载自 ______________白白の屋  

代码

<pre lang="cpp" line="1">
/*
Mail to   : miyubai@gamil.com
My Blog   : www.baiyun.me
Link      : http://www.cnblogs.com/MiYu  || http://www.cppblog.com/MiYu
Author By : MiYu
Test      : 1
Complier  : g++ mingw32-3.4.2
Program   :
Doc Name  :
*/
//#pragma warning( disable:4789 )
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <set>
#include
<map>
#include <utility>
#include <queue>
#include <stack>
#include
<list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
inline bool scan_d(int &num)  //整数输入
{
        char in;bool IsN=false;
        in=getchar();
        if(in==EOF) return false;
        while(in!='-'&&(in<'0'||in>'9')) in=getchar();
        if(in=='-'){ IsN=true;num=0;}
        else num=in-'0';
        while(in=getchar(),in>='0'&&in<='9'){
                num*=10,num+=in-'0';
        }
        if(IsN) num=-num;
        return true;
}
struct seg_tree{
       int l,r,val;
       long long sum;
       int mid () { return (r+l) >> 1; }
       int dis () { return r-l+1; }
}seg[600000];
int v[100010];
void creat ( int x, int y, int rt = 1 ) {
     seg[rt].l = x;
     seg[rt].r = y;
     seg[rt].val = 0;
     if ( x == y ) {
         return ;
     }
     int mid = seg[rt].mid();
     creat ( x, mid, rt << 1 );
     creat ( mid + 1, y, rt << 1 | 1 );
}
long long cr ( int x, int y, int rt = 1 ) {
     seg[rt].val = 0;
     if ( seg[rt].l == seg[rt].r ) {
         seg[rt].sum = v[x];
         return v[x];
     }
     int mid = seg[rt].mid();
     return seg[rt].sum = cr ( x, mid, rt << 1 )
                        + cr ( mid + 1, y, rt << 1 | 1 );
}
inline void pushdown ( int rt ) {
     int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
     if ( seg[rt].val ) {
         seg[LL].sum += (long long)seg[LL].dis() * seg[rt].val;
         seg[RR].sum += (long long)seg[RR].dis() * seg[rt].val;
         seg[LL].val += seg[rt].val;
         seg[RR].val += seg[rt].val;
         seg[rt].val = 0;
     }
}
void md ( int x, int y, int val, int rt = 1 ) {
     if ( seg[rt].l == x && seg[rt].r == y ) {
         seg[rt].val += val;
         seg[rt].sum += (long long)seg[rt].dis() * val;
         return;
     }
     int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
     pushdown ( rt );
     if ( x > mid ) md ( x, y, val, RR );
     else if ( y <= mid ) md ( x, y, val, LL );
     else {
          md ( x, mid, val, LL );
          md ( mid+1, y, val, RR );
     }
     seg[rt].sum = seg[LL].sum + seg[RR].sum;
}
long long q ( int x, int y, int rt = 1 ) {
    if ( seg[rt].l == x && seg[rt].r == y ) {
            return seg[rt].sum;
    }
    pushdown ( rt );
    int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
    if ( x > mid ) return q ( x, y, RR );
    else if ( y <= mid ) return q ( x, y, LL );
    else {
         return q ( x, mid, LL ) + q ( mid + 1, y, RR );
    }
}
int main ()
{
    int N, M;
    creat ( 1, 100000 );
    while ( scanf ( "%d%d", &N, &M ) == 2 ) {
          for ( int i = 1; i <= N; ++ i ) scanf ( "%d", &v[i] );
          cr ( 1, N );
          while ( M -- ) {
                char s[5];
                int x, y, val;
                scanf ( "%s", s );
                switch ( s[0] ) {
                       case 'Q':
                            scanf ( "%d%d", &x, &y );
                            printf ( "%lld\n", q ( x, y ) );
                            break;
                       case 'C':
                            scanf ( "%d%d%d", &x, &y, &val );
                            md ( x, y, val );
                }
          }
    }
    return 0;
}
</pre>

转载于:https://www.cnblogs.com/MiYu/archive/2010/11/16/1878879.html

HDU 3468 HDOJ 3468 A Simple Problem with Integers ACM 3468 IN HDU相关推荐

  1. A Simple Problem with Integers POJ - 3468 (线段树)

    思路:线段树,区间更新,区间查找 1 #include<iostream> 2 #include<vector> 3 #include<string> 4 #inc ...

  2. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

    题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...

  3. 2019_GDUT_新生专题V算法优化 B. A Simple Problem with Integers POJ 3468

    来源 POJ3468 题目: You have N integers, A1, A2, - , AN. You need to deal with two kinds of operations. O ...

  4. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  5. poj 3243:A Simple Problem with Integers

    3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制:  5000ms  单个测试点时间限制:  2000ms  内存限制:  131072 ...

  6. poj 3468 A Simple Problem with Integers(线段树区区)

    题目链接:  http://poj.org/problem?id=3468 题目大意:  给出N个数,和M次查询 C a b c  区间[a,b]的值都加上c Q a b     查询区间[a,b]值 ...

  7. POJ 3468 A Simple Problem with Integers(线段树:区间更新)

    http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...

  8. 线段树专辑—— pku 3468 A Simple Problem with Integers

    http://poj.org/problem?id=3468 典型的一道基于lazy传递的线段树题目,这题和一般题目不同的地方在于,它的每次操作不是简单的覆盖线段,而是累加.记得第一次写的时候纠结了好 ...

  9. POJ 3468 A Simple Problem with Integers

    分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...

  10. POJ 3468 A Simple Problem with Integers (1)

    POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...

最新文章

  1. CSharpGL(1)从最简单的例子开始使用CSharpGL
  2. Android中使用AlarmManager设置闹钟
  3. TensorFlow与主流深度学习框架对比
  4. 员外带你读论文:From RankNet to LambdaRank to LambdaMART: An Overview
  5. Java-日期 正则表达式
  6. visualsvn php,VisualSVN 手动记录访问日志
  7. 这个耳机一点不输千元级的AirPods
  8. gsonformat插件_裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯
  9. BAT在AI领域投资收购大起底:当我们说搞AI时我们要搞些什么?
  10. iBase4J部署总结¥
  11. python下载安装教程-一招解决:各种版本的Python下载安装教程
  12. 手机应用只清理不够,还要卸载
  13. matlab好看的字体,最佳50个新鲜+漂亮的字体(2011)
  14. 分享个强大的抓包工具
  15. 点云3D目标检测学习(2):pointnet++源码
  16. html怎么把图片左移_css怎么让图片向左移动?
  17. flv转mp4(ffmpeg)
  18. 【洛谷】P1138 第k小整数
  19. 腾讯网页登陆的加密机制
  20. 国庆节,一天开发一个小程序+Web系统。2.5K到手。【分享开发经验】【收藏起来】

热门文章

  1. 算法笔记_083:蓝桥杯练习 合并石子(Java)
  2. [转]常见的软件版本编号及命名
  3. 东芝MCU实现位带操作
  4. 使用工具类DbUtils连接数据库,并简单操作数据库
  5. 初探 Yii2 的测试模式 index-test.php
  6. ZOJ ACM 1314(JAVA)
  7. Python之路-(列表、元组、字典、集合、字符串)
  8. python 调用github的api,呈现python的受欢迎的程度
  9. JQuery EasyUI 之 messager基本使用
  10. 结合索引优化SQL语句提高数据库查询效率