Codeforces Round #179 (Div. 2) C:http://codeforces.com/problemset/problem/296/C

题意:给你一个序列,然后有两种操作,第一种操作是区间加上一个数,第二种操作也是区间操作 1 3 但是这里的区间不是对原序列,而是指第一种操作,1 3,表示把1,2,3三种操作都执行一遍。求所有的操作结束之后原来数组的数。

题解:先考虑一个简单的问题,就是只有第一种操作,就是区间加上一个数。这里没有查询,所以,先加和后加没有区别。所以或一个图就可以知道。我们可以这么搞,用一个vector<int>ll[n],rr[N],ll[i]记录以i为左端更新的那种操作,rr[i]表示以i为右端点的那些更新,as 表示当前数最终应该加的值,当遇到以i开始的时候,as+=这个更新的值,遇到i结尾的时候,as-=这个更新值,这样就可以for一遍就可以了。这样就解决的这个简单的问题,现在来考虑这个题目,也就是二级操作,同理,二级操作也可以了采用这种方式,来统计数操作执行的次数,然后就转化成一级问题,不过此时一级操作的更新值变为原来的值*执行的次数。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e5+;
long long a[N],b[N],c[N];
int n,m,k;
vector<int>ll[N],rr[N],l[N],r[N];
struct Node{
int l,r;
long long val;
}num[N],temp[N];
int t1,t2;
int main(){
while(~scanf("%d%d%d",&n,&m,&k)){
memset(a,,sizeof(a));
for(int i=;i<=n;i++){
scanf("%I64d",&a[i]);
}
for(int i=;i<=m;i++){
scanf("%d%d%I64d",&num[i].l,&num[i].r,&b[i]);
ll[num[i].l].push_back(i);
rr[num[i].r].push_back(i);
num[i].val=;
}
for(int i=;i<=k;i++){
scanf("%d%d",&temp[i].l,&temp[i].r);
l[temp[i].l].push_back(i);
r[temp[i].r].push_back(i);
}
long long as=;
memset(c,,sizeof(c));
for(int i=;i<=m;i++){
as+=l[i].size();
c[i]+=as;
as-=r[i].size();
}
for(int i=;i<=m;i++){
num[i].val=c[i]*b[i];
}
as=;
for(int i=;i<=n;i++){
for(int j=;j<ll[i].size();j++)
as+=num[ll[i][j]].val;
a[i]+=as;
for(int j=;j<rr[i].size();j++)
as-=num[rr[i][j]].val;
if(i!=n)
printf("%I64d ",a[i]);
}
printf("%I64d\n",a[n]);
}
}

Greg and Array的更多相关文章

  1. Codeforces 295A Greg and Array

    传送门 A. Greg and Array time limit per test 1.5 seconds memory limit per test 256 megabytes input stan ...

  2. Codeforces Round #179 (Div. 1) A. Greg and Array 离线区间修改

    A. Greg and Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/295/pro ...

  3. Greg and Array CodeForces 296C 差分数组

    Greg and Array CodeForces 296C 差分数组 题意 是说有n个数,m种操作,这m种操作就是让一段区间内的数增加或则减少,然后有k种控制,这k种控制是说让m种操作中的一段区域内 ...

  4. CF 295A Greg and Array (两次建树,区间更新,单点查询)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  5. Codeforces295A - Greg and Array(线段树的成段更新)

    题目大意 给定一个序列a[1],a[2]--a[n] 接下来给出m种操作,每种操作是以下形式的: l r d 表示把区间[l,r]内的每一个数都加上一个值d 之后有k个操作,每个操作是以下形式的: x ...

  6. CodeForces Round #179 (295A) - Greg and Array

    题目链接:http://codeforces.com/problemset/problem/295/A 我的做法,两次线段树 #include <cstdio> #include < ...

  7. Codeforces 296C Greg and Array

    数据结构题.个人认为是比较好的数据结构题.题意:给定一个长度为n的数组a,然后给定m个操作序列,每个操作:l, r, x将区间[l, r]内的元素都增加a,然后有k个查询,查询形式是对于操作序列x,y ...

  8. CodeForces Round #179 (295A) - Greg and Array 一个线段树做两次用

    线段树的区间更新与区间求和...一颗这样的线段树用两次... 先扫描1~k...用线段树统计出每个操作执行的次数... 那么每个操作就变成了 op. l  , op.r , op.c= times* ...

  9. CF296C Greg and Array 查分数组

    题目链接:http://codeforces.com/problemset/problem/296/C 题意:给你n.m.k,表示n个数a[i],m个对数的操作,k个对操作的操作.m个操作:数a[l] ...

随机推荐

  1. springmvc 返回xml

    需求: 1.springmvc返回xml: 技术及环境: Spring 4.3.1.RELEASE JDK 1.8 IDEA 15.0.6 Maven 3 实现: spirngxml的配置主要如下: ...

  2. Android(java)学习笔记172:BroadcastReceiver之 Android广播机制

    Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...

  3. Linq扩展方法之Aggregate 对序列应用累加器函数

    Linq扩展方法之Aggregate  对序列应用累加器函数; 函数模板:// 函数名:对序列应用累加器函数. // Parameters:参数要求 // source:要聚合的 System.Col ...

  4. 关于try和finaly 里面return的问题

    首先,下面这个方法调用: public int bbb(){ if(true){ return 3; } if(true){ return 4; } return 0; } 返回的结果是 :3 可见r ...

  5. java 内部类学习

    类和内部类的关系就如同人和心脏的关系. 实例1:内部类的基本结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //外部 ...

  6. 关于sql 资源竞争死锁现象

    问题:System.Exception: 事务(进程 ID 321)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品.请重新运行该事务 死锁最深层的原因就是一个:资源竞争 表现 ...

  7. Sql Xml

    /* sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1.xml: 能认识元素.属性和值 2.xpath: 寻址语言,类似windows ...

  8. MySQL设置

    在MySQL的使用中很容易出现乱码的情况. 实际上在MySQL中有个地方表明了系统中所用到的所有的字符集. 例如: 从中可以看出,对于server和database的默认字符集都是latin1,这样很 ...

  9. Linux系统工程师学习方法

    学习顺序: 一.至少熟悉一种嵌入式芯片架构 最适合初学者的就是arm芯片 二.uboot的使用与移植 首先要了解uboot的启动流程,根据启动顺序,进行代码的修改.编译与移植 三.linux驱动开发 ...

  10. html中子div用了浮动怎样让父div的大小自动撑开(清除浮动)

    浮动子div撑开父div的几种方法: (1)在父div中在添加一个清除浮动的子div<div style=" clear:both;"></div>,该di ...