#519. ycw的成绩表
时间:2019-11-08
本文章向大家介绍#519. ycw的成绩表,主要包括#519. ycw的成绩表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目背景
wwh是芜湖一中的一名程序员,有一天,他有幸被ycw的找去。。。
Ycw有n张数学考试卷。
题目描述
ycw的问题是这样的:
ycw有一大堆的考试卷,一共n张,这些考试卷被他排成一行,每次考试都有一个预期成绩。
ycw一共有m个问题:
1 x k 将第x次考试的预期成绩加上为k(比如,ycw重考一遍)
2 x y k 将第x到y次考试的预期成绩都加上k(比如,ycw疯狂刷题)
3 x y 求第x到y次考试的预期成绩最大值。
4 x y 求第x到y次考试的预期成绩最小值。
ycw不想被老师和家长找,也不想写线段树,于是他找到了wwh。
wwh只会暴力,于是找到了AK了NOI2017的C国的第一OIer,你,来帮他解决这个问题。
输入输出格式
输入格式:
第一行两个数n,m。
第二行n个数,分别表示原来考试的预期成绩
第3~m+2行,表示ycw的问题,格式如题目描述中所述。
输出格式:
每行一个数,表示3,4询问的答案
数据生成器(因为大样例放不下)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
freopen("flower.in","w",stdout);
int n,m;n=m=200000;
printf("%d %d\n",n,m);
for(int i=1;i<=n;i++){
printf("%d ",rand()+1);
}
printf("\n");
while(m--){
int x;x=rand()%4+1;
if(x==1){
printf("1 %d %d\n",rand()%n+1,rand()+1);
}
else if(x==2){
int l,r;l=rand()%n+1;r=rand()%n+1;
if(r<l) swap(l,r);
printf("2 %d %d %d\n",l,r,rand()+1);
}
else if(x==3){
int l,r;l=rand()%n+1;r=rand()%n+1;
if(r<l) swap(l,r);
printf("3 %d %d\n",l,r);
}
else if(x==4){
int l,r;l=rand()%n+1;r=rand()%n+1;
if(r<l) swap(l,r);
printf("4 %d %d\n",l,r);
}
}
return 0;
}
暴力
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
long long n,m,s[200005];
long long read(){
char ch;long long w,f;w=0;f=1;
ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return w*f;
}
int main(){
freopen("flower.in","r",stdin);
freopen("flower1.out","w",stdout);
n=read();m=read();
for(int i=1;i<=n;i++)
s[i]=read();
long long a,x,y,z;
while(m--){
a=read();
if(a==1){
x=read();z=read();s[x]+=z;
}
else if(a==2){
x=read();y=read();z=read();
for(long long i=x;i<=y;i++)
s[i]+=z;
}
else if(a==3){
x=read();y=read();long long ans=-1e15;
for(long long i=x;i<=y;i++)
ans=max(ans,s[i]);
printf("%lld\n",ans);
}
else{
x=read();y=read();long long ans=1e15;
for(long long i=x;i<=y;i++)
ans=min(ans,s[i]);
printf("%lld\n",ans);
}
}
}
说明
100%数据保证:n , m<=200,000,1<=x , y<=n,|k|<=10^9
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define ll long long using namespace std; const int MAXN=1600005,inf=100000000; int n,m,x; ll k,jl[MAXN],u,v; struct cyq{ int l,r; ll ma,mi,tip; }a[MAXN]; void build(int p,int l,int r){ a[p].l=l; a[p].r=r; a[p].ma=-1000*inf; a[p].mi=1000*inf; if(l==r){ a[p].ma=a[p].mi=jl[l]; return; } int mid=(l+r)>>1; build(p*2,l,mid); build(p*2+1,mid+1,r); a[p].ma=max(a[p*2].ma,a[p*2+1].ma); a[p].mi=min(a[p*2].mi,a[p*2+1].mi); } void spread(int p){ if(a[p].tip==0||a[p].l==a[p].r){ return; } a[p*2].ma+=a[p].tip; a[p*2].mi+=a[p].tip; a[p*2+1].ma+=a[p].tip; a[p*2+1].mi+=a[p].tip; a[p*2].tip+=a[p].tip; a[p*2+1].tip+=a[p].tip; a[p].tip=0; } void change(int p){ if(u<=a[p].l && v>=a[p].r){ a[p].ma+=k;a[p].mi+=k; a[p].tip+=k;return; } spread(p); int mid=(a[p].l+a[p].r)>>1; if(u<=mid){ change(p*2); } if(v>mid){ change(p*2+1); } a[p].ma=max(a[p*2].ma,a[p*2+1].ma); a[p].mi=min(a[p*2].mi,a[p*2+1].mi); } ll ask1(int p){ if(u<=a[p].l&&v>=a[p].r){ return a[p].ma; } spread(p); long long ans=-inf*1000; int mid=(a[p].l+a[p].r)>>1; if(u<=mid){ ans=max(ans,ask1(p*2)); } if(v>mid){ ans=max(ans,ask1(p*2+1)); } return ans; } ll ask2(int p){ if(u<=a[p].l && v>=a[p].r){ return a[p].mi; } spread(p); long long ans=inf*1000; int mid=(a[p].l+a[p].r)>>1; if(u<=mid){ ans=min(ans,ask2(p*2)); } if(v>mid){ ans=min(ans,ask2(p*2+1)); } return ans; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld",&jl[i]); } build(1,1,n); while(m--){ scanf("%d%lld%lld",&x,&u,&v); if(x==1){ k=v; v=u; change(1); } if(x==2){ scanf("%lld",&k); change(1); } if(x==3){ printf("%lld\n",ask1(1)); } if(x==4){ printf("%lld\n",ask2(1)); } } return 0; }
原文地址:https://www.cnblogs.com/xiongchongwen/p/11821159.html
- 基于Three.js的360度全景--photo-sphere-viewer--简介
- MyBatis3-配置使用log4j输出日志
- nginx支持跨域访问
- nginx静态资源文件无法访问,403 forbidden错误
- vue.js如何在标签属性中插入变量参数
- SpringBoot解决ajax跨域问题
- WebBrowser(IE) 与 JS 相互调用
- HOSTS配置问题导致集群异常故障分析
- Linux Regulator Framework(2)_regulator driver
- systemd的作用
- alsa声卡分析alsa-utils调用过程(二)-tinymixer
- alsa声卡分析alsa-utils调用过程(一)-tinyplay
- ALSA声卡驱动的DAPM(二)-建立过程
- ALSA声卡驱动的DAPM(一)-DPAM详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android WebView的使用方法及与JS 相互调用
- Android标题栏上添加多个Menu按钮的实例
- Android编程解析XML文件的方法详解【基于XmlPullParser】
- 教你3分钟了解Android 简易时间轴的实现方法
- Android网络技术HttpURLConnection详解
- Ubuntu16.04下CUDA8.0和CUDA9.0共存
- Ubuntu 20.04 开启隐藏录音降噪功能(推荐)
- 解密 Linux 版本信息的方法
- ubuntu20.04连接wifi的方法(2种)
- 服务器Centos部署MySql并连接Navicat过程详解
- Android横竖屏幕切换生命周期详解
- LINUX中如何查看某个端口是否被占用的方法
- Android实现RecyclerView添加分割线的简便方法
- Android定时器Timer的停止和重启实现代码
- Ubuntu20.04开启root账户的方法步骤