[noi38]游戏
用线段数维护一段区间内的两个信息:1.需要多少经验就可以让有一个人升级,2.等级和。单点修改直接暴力做就可以,区间修改考虑如果这个区间不会产生升级就不递归下去而是打上懒标记。
考虑这个算法的时间复杂度:单点修改的时间复杂度为$o(log_{2}n)$,而区间修改由于每一个点最多升级n+q次,总时间复杂度为$o((n+q)log_{2}m)$,可以过。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1000001
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 int n,m,q,p,x,y,z,mi[N],f[N],lazy[N],a[N];
8 void up(int k){
9 f[k]=f[L]+f[R];
10 mi[k]=min(mi[L],mi[R]);
11 }
12 void down(int k){
13 lazy[L]+=lazy[k];
14 mi[L]-=lazy[k];
15 lazy[R]+=lazy[k];
16 mi[R]-=lazy[k];
17 lazy[k]=0;
18 }
19 void update(int k,int l,int r,int x,int y,int z){
20 if ((l>y)||(x>r))return;
21 if ((x<=l)&&(r<=y)){
22 mi[k]-=z;
23 if (mi[k]>0){
24 lazy[k]+=z;
25 return;
26 }
27 if (l==r){
28 mi[k]-=a[f[k]+1];
29 f[k]=upper_bound(a+1,a+m+1,-mi[k])-a-1;
30 mi[k]+=a[f[k]+1];
31 return;
32 }
33 }
34 down(k);
35 update(L,l,mid,x,y,z);
36 update(R,mid+1,r,x,y,z);
37 up(k);
38 }
39 void update(int k,int l,int r,int x,int y){
40 if (l==r){
41 f[k]=upper_bound(a+1,a+m+1,y)-a-1;
42 mi[k]=a[f[k]+1]-y;
43 return;
44 }
45 down(k);
46 if (x<=mid)update(L,l,mid,x,y);
47 else update(R,mid+1,r,x,y);
48 up(k);
49 }
50 int query(int k,int l,int r,int x,int y){
51 if ((l>y)||(x>r))return 0;
52 if ((x<=l)&&(r<=y))return f[k];
53 down(k);
54 return query(L,l,mid,x,y)+query(R,mid+1,r,x,y);
55 }
56 int main(){
57 scanf("%d%d%d",&n,&m,&q);
58 for(int i=1;i<=m;i++)scanf("%d",&a[i]);
59 a[m+1]=0x3f3f3f3f;
60 for(int i=1;i<=n;i++){
61 scanf("%d",&x);
62 update(1,1,n,i,x);
63 }
64 for(int i=1;i<=q;i++){
65 scanf("%d%d%d",&p,&x,&y);
66 if (p==1){
67 scanf("%d",&z);
68 update(1,1,n,x,y,z);
69 }
70 if (p==2)update(1,1,n,x,y);
71 if (p==3)printf("%d\n",query(1,1,n,x,y));
72 }
73 }
[noi38]游戏的更多相关文章
- 使用HTML5开发Kinect体感游戏
一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- 游戏服务器菜鸟之C#初探一游戏服务
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...
- iOS审核这些坑,腾讯游戏也踩过
作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...
- 漫谈C#编程语言在游戏领域的应用
0x00 前言 随着微软越来越开放,C#也变得越来越吸引人们的眼球.而在游戏行业中,C#也开始慢慢地获得了关注.这不, 网易绝代双娇手游团队已经全面使用.Net Core支持前后端统一C#开发,跨平台 ...
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- 趣说游戏AI开发:曼哈顿街角的A*算法
0x00 前言 请叫我标题党!请叫我标题党!请叫我标题党!因为下面的文字既不发生在美国曼哈顿,也不是一个讲述美国梦的故事.相反,这可能只是一篇没有那么枯燥的关于算法的文章.A星算法,这个在游戏寻路开发 ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
随机推荐
- nginx访问权限问题
1.问题 server { listen 8011; server_name test.cn; location ~ \.php?.*$ { root /home/zhj/; #fastcgi_pas ...
- SpringPlugin-Core在业务中的应用
前言 一直负责部门的订单模块,从php转到Java也是如此,换了一种语言来实现订单相关功能.那么Spring里有很多已经搭建好基础模块的设计模式来帮助我们解耦实际业务中的逻辑,用起来非常的方便!就比如 ...
- VMware中Linux虚拟机与Windows主机共享文件夹
VMware下Linux虚拟机与Windows主机共享文件夹 1. 安装vm-tool 2. 开启共享文件夹 虚拟机->设置->选项->共享文件夹"右边选择"总是 ...
- 【UE4 设计模式】单例模式 Singleton Pattern
概述 描述 保证一个类只有一个实例 提供一个访问该实例的全局节点,可以视为一个全局变量 仅在首次请求单例对象时对其进行初始化. 套路 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符. ...
- pycharm 服务器连接及一些问题解决
主要介绍一下如何使用pycharm连接服务器并在服务器上炼丹,并对遇到的一个小问题进行说明. 目录 1,SSH连接 2,linux常用命令 3,配置anaconda 4,运行代码 5,一个常见错误 1 ...
- mongodb的聚合操作
在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用 聚合框架(aggregation) 来完成.在mongodb ...
- 零基础小白要如何跟好的学习嵌入式Linux
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...
- 零基础入门之Linux进程基础
计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等.这些最基础的计算机动作被称为指令(instruction).所谓的程序(program),就是这样一系列指 ...
- 攻防世界 杂项 10.2017_Dating_in_Singapore
题目描述: 01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-0201 ...
- objdump--反汇编查看
转载:objdump命令_Linux objdump 命令用法详解:显示二进制文件信息 (linuxde.net) objdump命令 编程开发 objdump命令是用查看目标文件或者可执行的目标文件 ...