1129 - 喵哈哈村的战斗魔法师丶坏坏い月

Time Limit:3s Memory Limit:256MByte

Submissions:490Solved:107

DESCRIPTION

坏坏い月是月大叔的ID,他是一个掌握者772002种魔法的物理系战士,最擅长的技能就是搞事。今天他又要开始搞事了。

给你n

个数,你需要实现一下操作:

  1. l r v ,在[l,r]区间内找到第一个大于等于v的数,输出这个数的下标,如果找不到的话,请输出-1噢

  2. l r v,让[l,r]区间所有数增加v

INPUT
输入第一行包含一个正整数t(1≤t≤100)

,表示有t组数据 对于每组数据: 第一行包含两个整数n(1≤n≤100000),q(1≤q≤100000),表示数的个数,以及询问的个数。 第二行包含n个整数 ai(1≤ai≤1000000000) 接下来q行,每行四个整数opt(1≤opt≤2),l,r(1≤l≤r≤n),v(1≤v≤1000000000)

 
OUTPUT
对于每个询问,输出一行表示答案.
SAMPLE INPUT
1 5 3 1 2 3 4 5 1 1 2 3 2 1 2 3 1 1 2 3
SAMPLE OUTPUT
-1 1
SOLUTION
线段树区间修改,用lazy标记处理,由于我在ask()函数写的不是进行的二分查找而是两边都查找导致TLE,后来改了才AC,可见细节的重要性,
如果在左边找到了满足条件的数则可以放弃右边的查找否则两边都要找。
 #include<bits/stdc++.h>
using namespace std;
#define LL long long
#define MAXN ((100000<<2)+15)
struct SegTree
{
#define lc (id<<1)
#define rc (id<<1|1)
#define M ((L+R)>>1)
LL Max[MAXN],Add[MAXN];
void init()
{
memset(Max,,sizeof(Max));
memset(Add,,sizeof(Add));
}
void pushdown(int L,int R,int id)
{
if(!Add[id]) return;
Add[lc]+=Add[id];
Add[rc]+=Add[id];
Max[lc]+=Add[id];
Max[rc]+=Add[id];
Add[id]=;
}
void build(int L,int R,int id)
{
if(L==R){scanf("%lld",&Max[id]);return;}
build(L,M,lc);
build(M+,R,rc);
Max[id]=max(Max[lc],Max[rc]);
}
void update(int L,int R,int id,int l,int r,int v)
{
if(L>=l&&R<=r){
Max[id]+=v;
Add[id]+=v;
return;
}
pushdown(L,R,id);
if(l<=M) update(L,M,lc,l,r,v);
if(r>M) update(M+,R,rc,l,r,v);
Max[id]=max(Max[lc],Max[rc]);
}
int ask(int L,int R,int id,int l,int r,int v)
{
if(Max[id]<v) return -;
if(L==R){
if(!(L>=l&&R<=r)) return -;
if(Max[id]<v) return -;
else return L;
}
pushdown(L,R,id);
Max[id]=max(Max[lc],Max[rc]);
int ans=-,y=-;
if(l<=M) ans=ask(L,M,lc,l,r,v);
if(ans!=-) return ans;
if(r>M) y=ask(M+,R,rc,l,r,v);
return y;
}
}seg;
int main()
{
int t,n,m,i,j,k,opt,l,r,v;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
seg.init();
seg.build(,n,);
while(m--){
scanf("%d%d%d%d",&opt,&l,&r,&v);
if(opt==){
printf("%d\n",seg.ask(,n,,l,r,v));
}
else{
seg.update(,n,,l,r,v);
}
}
}
return ;
}

玲珑oj 1129 ST的更多相关文章

  1. 玲珑OJ 1129 - 喵哈哈村的战斗魔法师丶坏坏い月

    1129 - 喵哈哈村的战斗魔法师丶坏坏い月 Time Limit:3s Memory Limit:256MByte Submissions:315Solved:71 DESCRIPTION 坏坏い月 ...

  2. 玲珑oj 1117 线段树+离线+离散化,laz大法

    1117 - RE:从零开始的异世界生活 Time Limit:1s Memory Limit:256MByte Submissions:438Solved:68 DESCRIPTION 486到了异 ...

  3. 九度OJ 1129:Skew数 (大数运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:734 解决:548 题目描述: 在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1).  每个位上的可能数字是0 ...

  4. 玲珑oj 1028 贪心

    http://www.ifrog.cc/acm/problem/1028 很有趣的一道题,求从n个数里挑出不同的两个,使得他俩'|','&','^'后的值尽量大,求这个最大的结果. 求最大的异 ...

  5. 玲珑oj 1121 思维

    1121 - Reverse the lights Time Limit:2s Memory Limit:256MByte Submissions:376Solved:111 DESCRIPTION ...

  6. 玲珑oj 1128 RMQ模板

    1128 - 咸鱼拷问 Time Limit:3s Memory Limit:128MByte Submissions:380Solved:118 DESCRIPTION 给你两个序列A,B.每个序列 ...

  7. 值域线段树 (玲珑OJ 1117)

    点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...

  8. zzuli OJ 1129: 第几天

    Description 你知道.2012-1-1是该年的第1天.而9999-9-9呢?给你一个详细的日期,计算该日期是该年的第几天. Input 输入一个日期.格式为:Year-month-day.y ...

  9. 玲珑OJ 1083:XJT Love Digits(离线处理+哈希)

    http://www.ifrog.cc/acm/problem/1083 题意:比较好懂.注意答案的x不包含ax本身,所以才输出-1. 思路:离线处理.根据x排序,然后每次更新Hash[]数组就好了. ...

随机推荐

  1. 简单认识python的数据类型和语法

    一.Python介绍 1用途 1)WEB开发 最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle, Django官方的标语把Djang ...

  2. To keep up-to-date with Latest Jordans 2016

    The Latest Jordans 2016 will feature cement speckling because the base, Reflect Silver accents, a a ...

  3. Django:学习笔记(5)——会话

    Django:学习笔记(5)——会话 配置中间件 Django中使用会话,需要配置一个中间件. 配置会话引擎 默认情况下,Django在数据库中存储sessions(使用了django.contrib ...

  4. BZOJ 5427: 最长上升子序列

    $f[i] 表示长度为i的最长上升子序列的最后一位的最小值是多少$ 对于普通的$LIS我们可以二分确定位置去更新$ 再来考虑对于这个,如果有某一位没有确定的话 那么这一位是可以随便取的,也就是说,所有 ...

  5. C#小票打印机动态纸张尺寸

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. cocos2d: fullPathForFilename: No file found at /cc_2x2_white_image. Possible missing file.

    程序运行的时候输出这条信息cocos2d: fullPathForFilename: No file found at /cc_2x2_white_image. Possible missing fi ...

  7. 2009-2010 ACM-ICPC, NEERC, Western Subregional Contest

    2009-2010 ACM-ICPC, NEERC, Western Subregional Contest 排名 A B C D E F G H I J K L X 1 0 1 1 1 0 1 X ...

  8. cookie注入原理

    cookie注入原理-->红客联盟 http://www.2cto.com/article/201202/118837.html 前言: document.cookie:表示当前浏览器中的coo ...

  9. ubuntu 18.04 64bit下如何安装python开发工具jupyter

    1.执行一下命令进行安装 sudo apt-get install python3-distutils wget https://bootstrap.pypa.io/get-pip.py sudo p ...

  10. ubuntu下apt-get的配置文件是哪个

    答:在/etc/apt/apt.conf 这个配置文件里可以指定使用代理,如: Acquire::https::proxy "http://myproxy.com:8080/";