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. Xcode8免证书生产IPA打包文件

    免证书生产IPA打包文件   修改Xcode配置文件: 关闭Xcode.然后打开“其他-终端”,就是命令行工具 cd /Applications/Xcode.app/Contents/Develope ...

  2. (转 )C++ static、const和static const 以及它们的初始化

    const定义的常量在函数执行之后其空间会被释放,而static定义的静态常量在函数执行后不会被释放其空间.但不论是Const还是static  他们定义的内容都会随着程序的结束而被系统清楚. sta ...

  3. XDU 1037 倍流畅序列(字符串匹配+贪心)

    题目描述 对于一个0,1串s, 从左端开始读取它的0获得序列s0,从右端开始读取它的1获得s1,如果s0与s1同构,则称s为倍流畅序列.例如:011001是一个倍流畅序列, 因为:s0 = 0__00 ...

  4. PKU 1094 Sorting It All Out(拓扑排序)

    题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列. 是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.判断该序列是否唯一: 3.该序列字母次序之间 ...

  5. CodeForces - 528D Fuzzy Search (FFT求子串匹配)

    题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive -4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法 ...

  6. HDFS datanode心跳与运维中的实际案例

    分布式系统的节点之间常采用心跳来维护节点的健康状态,如yarn的rm与nm之间,hdfs的nn与dn之间.DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向 ...

  7. 论文笔记:dropout

    Improving neural networks by preventing co-adaptation of feature detectors arXiv preprint arXiv: 120 ...

  8. web.py url传参及获取

    第一种:直接获取: import web urls = ( '/(.*)','index' #URL后面必须加(.*) ) class index: def GET(self,name): print ...

  9. RabbitMQ的安装及集群搭建方法

    RabbitMQ安装 1 安装erlang 下载地址:http://www.erlang.org/downloads 博主这里采用的是otp_src_19.1.tar.gz (200MB+) [roo ...

  10. zookeeper可视化管理工具node-zk-browser安装

    一.安装nodejs 1. 下载 wget https://github.com/joyent/node/archive/v0.10.35.tar.gz 2. 解压 3. 安装依赖 yum -y in ...