雅礼集训 2017 Day1

T1:loj 6029 市场

题目大意:

维护一个数据结构支持区间加 区间除法 区间求最小值 区间求和

思路:

用线段树维护区间加 区间求最小值 区间和

对于区间除法 注意到除数d很大而加法的w很小

尝试将区间除法变成区间减法

可以转化成减法的情况就是除法的时候减的数相同即区间内所有数相同或最小数和最大数相差为一且最大数为除数的倍数

即维护区间min max 加减法tag sum即可

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<map>
 9 #define ll long long
10 #define inf 2147483611
11 #define MAXN 100100
12 using namespace std;
13 inline int read()
14 {
15     int x=0,f=1;char ch=getchar();
16     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
17     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
18     return x*f;
19 }
20 int n,q,g[MAXN];
21 ll sum[MAXN<<2],mn[MAXN<<2],tag[MAXN<<2],mx[MAXN<<2];
22 void upd(int k) {sum[k]=sum[k<<1]+sum[k<<1|1],mn[k]=min(mn[k<<1],mn[k<<1|1]),mx[k]=max(mx[k<<1],mx[k<<1|1]);}
23 void build(int k,int l,int r)
24 {
25     if(l==r) {sum[k]=mn[k]=mx[k]=g[l];return ;}
26     tag[k]=0;
27     int mid=(l+r)>>1;
28     build(k<<1,l,mid);build(k<<1|1,mid+1,r);
29     upd(k);
30 }
31 void pshd(int k,int l,int r)
32 {
33     int mid=(l+r)>>1;
34     tag[k<<1]+=tag[k],tag[k<<1|1]+=tag[k];
35     mn[k<<1]+=tag[k],mn[k<<1|1]+=tag[k];
36     mx[k<<1]+=tag[k],mx[k<<1|1]+=tag[k];
37     sum[k<<1]+=(mid-l+1)*tag[k],sum[k<<1|1]+=(r-mid)*tag[k];
38     tag[k]=0;
39 }
40 void mdfp(int k,int l,int r,int a,int b,int x)
41 {
42     if(a==l&&r==b) {sum[k]+=(r-l+1)*x,tag[k]+=x,mn[k]+=x,mx[k]+=x;return ;}
43     int mid=(l+r)>>1;
44     if(tag[k]!=0) pshd(k,l,r);
45     if(b<=mid) mdfp(k<<1,l,mid,a,b,x);
46     else if(a>mid) mdfp(k<<1|1,mid+1,r,a,b,x);
47     else {mdfp(k<<1,l,mid,a,mid,x);mdfp(k<<1|1,mid+1,r,mid+1,b,x);}
48     upd(k);
49 } 
50 void mdfd(int k,int l,int r,int a,int b,int x)
51 {
52     if(l==a&&r==b&&mn[k]-(ll)floor(1.0*mn[k]/x)==mx[k]-(ll)floor(1.0*mx[k]/x))
53     {
54         ll tmp=mn[k]-(ll)floor(1.0*mn[k]/x);
55         sum[k]-=tmp*(r-l+1),mn[k]-=tmp,mx[k]-=tmp,tag[k]-=tmp;
56         return ;
57     }
58     int mid=(l+r)>>1;
59     if(tag[k]!=0) pshd(k,l,r);
60     if(b<=mid) mdfd(k<<1,l,mid,a,b,x);
61     else if(a>mid) mdfd(k<<1|1,mid+1,r,a,b,x);
62     else {mdfd(k<<1,l,mid,a,mid,x);mdfd(k<<1|1,mid+1,r,mid+1,b,x);}
63     upd(k);
64 }
65 ll querys(int k,int l,int r,int a,int b)
66 {
67     if(a==l&&r==b) return sum[k];
68     int mid=(l+r)>>1;
69     if(tag[k]!=0) pshd(k,l,r);
70     if(b<=mid) return querys(k<<1,l,mid,a,b);
71     else if(a>mid) return querys(k<<1|1,mid+1,r,a,b);
72     else return querys(k<<1,l,mid,a,mid)+querys(k<<1|1,mid+1,r,mid+1,b);
73 }
74 ll querym(int k,int l,int r,int a,int b)
75 {
76     if(a==l&&r==b) return mn[k];
77     int mid=(l+r)>>1;
78     if(tag[k]!=0) pshd(k,l,r);
79     if(b<=mid) return querym(k<<1,l,mid,a,b);
80     else if(a>mid) return querym(k<<1|1,mid+1,r,a,b);
81     else return min(querym(k<<1,l,mid,a,mid),querym(k<<1|1,mid+1,r,mid+1,b));
82 }
83 int main()
84 {
85     n=read(),q=read();int a,b,c;
86     for(int i=1;i<=n;i++) g[i]=read();
87     build(1,1,n);
88     while(q--)
89     {
90         a=read();
91         if(a==1) {a=read(),b=read(),c=read();mdfp(1,1,n,a+1,b+1,c);}
92         else if(a==2) {a=read(),b=read(),c=read();mdfd(1,1,n,a+1,b+1,c);}
93         else if(a==3) {a=read(),b=read();printf("%lld\n",querym(1,1,n,a+1,b+1));}
94         else if(a==4) {a=read(),b=read();printf("%lld\n",querys(1,1,n,a+1,b+1));}
95     }
96 }
View Code

T2:loj 6030 矩阵

题目大意:

一个黑白矩阵 可以把一行的顺序变成一列

求最少操作数

思路:

可以先做出一行黑色的

然后把所有不是完整一列的黑色变成黑色

做出黑色的最少步数是每一行的白色个数+(如果该行对应的列是否有黑色+1)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<map>
 9 #define ll long long
10 #define inf 2147483611
11 #define MAXN 1010
12 using namespace std;
13 inline int read()
14 {
15     int x=0,f=1;char ch=getchar();
16     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
17     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
18     return x*f;
19 }
20 int ok,n,f[MAXN],cnt1[MAXN],cnt2[MAXN],ans;
21 char maze[MAXN][MAXN];
22 int main()
23 {
24     n=read(),ans=2*n+1;
25     for(int i=1;i<=n;i++)
26     {
27         scanf("%s",maze[i]+1);
28         for(int j=1;j<=n;j++)
29             if(maze[i][j]=='#') f[j]=1,ok++;
30             else cnt1[i]++,cnt2[j]++;
31     }    
32     if(!ok) {puts("-1");return 0;}
33     for(int i=1;i<=n;i++)
34         ans=min(ans,cnt1[i]+(!f[i]?1:0));
35     for(int i=1;i<=n;i++)
36         ans+= cnt2[i]?1:0;
37     printf("%d",ans);
38 }
View Code

T3:loj 6031 字符串

转载于:https://www.cnblogs.com/yyc-jack-0920/p/9142216.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle linux6 u盘安装,Oracle Enterprise Linux/Redhat Linux 6.0 U盘安装方法

多灾多难的Fedora 15安装史&#xff1a;第一天方法1 使用UltraISO直接将ISO写入硬盘映像。。结果无法启动方法2 使用liveusb-creatorFedora 15 64位 Live CD 光标永远停留在左上角。无法引导。。方法3 syslinux &#xff0c;然后自己写个菜单 加载 linux askmethod 结果提示需…

多行文本框

2019独角兽企业重金招聘Python工程师标准>>> #-*- coding: UTF-8 -*- import wxclass TextFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self,None,-1,u多行文本框,size(250,150))panelwx.Panel(self,-1)multiTextwx.TextCtrl(panel,-1,"Python is a…

免oracle客户端下载,Oracle免安装客户端

我们要连接oracle经常需要安装庞大的oracle客户端&#xff0c;很占用硬盘空间&#xff0c;所以我们通过下面的设置就可以在不安装客户端的情况下连接到oracle。首先需要下载Oracle Client Package(免安装包)从http://www.oracle.com/technology/software/tech/oci/instantclien…

tar命令详解

tar [-cxt zjvfpPN] 文件 目录 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; 在参数的下达中&#xff0c; c/x/t 仅能存在一个&a…

网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

第三方登录平台接入 &#xff08;QQ\微信登录&#xff09; QQ登录接入 第一步成为QQ应用开发者&#xff0c;审核期限七天 一、所需材料 1、公司注册相关信息 2、营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者&#xff0c;认证费用300元一年 一、所需材料 1、网站相…

Directx11教程(55) 建立球形和锥形物体

本教程中&#xff0c;我们新建2个model class&#xff0c;SphereModelClass以及CylinderModelClass,分别用来表示球形和锥形物体。 程序执行后的界面如下&#xff1a; 线框模式界面如下&#xff1a; 从线框模式可以看出&#xff0c;球形是由三个因素决定&#xff1a;半径、经度…

JAVA基础学习之路(十一)引用传递

引用传递&#xff1a; 不同栈内存可以指向同一块堆内存&#xff0c;不同栈内存可以对一块堆内存进行修改 范例一&#xff1a; class Message {private int num 10;public Message(int num) {this.num num;}public void setNum(int num) {this.num num;}public int getNum() …

oracle 压缩导出 导入,EXP直接导出压缩问津,IMP直接导入压缩文件的方法

在10G之前&#xff0c;甚至在10G的Oracle环境中&#xff0c;有很多数据量不大&#xff0c;重要性不太高的系统依然采用EXP/IMP逻辑导出备份方式&#xff0c;或者&#xff0c;作为辅助备份方式。通常情况下&#xff0c;我们都是这样操作的&#xff1a;1.exp导出2.gzip压缩3.gzip…

Confluence 6 针对你的数据库类型确定校验 SQL

不同的数据库通常要求不同的 SQL 校验查询。校验查询通常需要尽可能的简单&#xff0c;这个查询在链接从数据库连接池中取出的时候都会被执行一次。 针对不同的数据库类型&#xff0c;我们推荐先的校验查询 SQL&#xff1a; MySQLselect 1Microsoft SQL Serverselect 1Oraclese…

c#oracle数组超出,c# – ODP.net填充数据集时的Oracle Decimal Number精度问题.异常:算术运算导致溢出...

我在c#.net 2(Visual Studio 2005 SP1)中工作,尝试使用来自Oracle10g数据库的select * from table的结果填充数据集. .net框架,IDE和数据库不能在此客户端站点更改.我使用ODP.net提供商连接,dll版本是2.102.2.20当我运行fill命令时,我得到一个例外&#xff1a;算术运算导致溢出…

php常见数据类型转换与判断

2019独角兽企业重金招聘Python工程师标准>>> 强制类型转换问题&#xff1a; &#xff08;array&#xff09; false > array(0>) &#xff08;array&#xff09; true > array(0>1) &#xff08;array&#xff09; null >array( ) 进行类型转…

Maven deploy部署jar到远程私服仓库

一、配置私服账号密码 修改maven配置文件&#xff0c;在$MAVEN_HOME/conf/setting.xml中增加如下配置&#xff1a; 注意&#xff0c;这里配置的id为releases何snapshots&#xff0c;当然可以改为其他&#xff0c;先记得这里有过id的配置&#xff0c;后面有用 二、配置远程发布到…

sublime怎么编译php,让sublime编译php、js

一、PHP1、将PHP程序设置到环境变量中&#xff0c;以使在任意目录下都可执行php命令。关于这个&#xff0c;linux下和windows下分别又不同的方法&#xff0c;可以网上搜索到。2、创建PHP编译系统添加 PHP 的 build system&#xff0c;如图所示&#xff0c; Tools->Build Sys…

HDU-Yuna's confusion 树状数组 Or Multiset

比赛的时候竟然没有想到这题可以用树状数组过&#xff0c;由于数字的区间比较小&#xff0c;所以直接开设一个树状数组&#xff0c;定义sum(i) 表示小于i的数的总数。那么判定一个数是否有的条件就是计算sum(i1) sum(i) 便可以了&#xff0c;查找第K大的数&#xff0c;也就可以…

linux系统etc什么意思,etc.是什么意思 linux下的etc是什么意思

Etc是Electronic the collection的缩写&#xff0c;指电子不停车收费系统&#xff0c;是指车辆在通过收费站时通过车上安装的Etc车载系统与收费站之间微波通讯&#xff0c;进行车辆识别&#xff0c;再联合网络和银行进行自动扣费的一种新型收费模式。电子不停车收费系统(英语&a…

《几何与代数导引》例2.7.3

求$yz$面上二次曲线\begin{equation}\begin{cases}\frac{z^2}{c^2}-\frac{y^2}{a^2}1\\x0\\\end{cases}\end{equation}绕$z$轴旋转所得的二次曲面的方程.解&#xff1a;对于二次曲面上的任意点$p(x,y,z)$.都存在相应的二次曲面上的点$(x_0,y_0,z_0)$,使得\begin{equation}(x-x_…

【Leetcode】【Longest Palindromic Substring】【最长回文子串】【C++】

题目&#xff1a;给定字符串&#xff0c;求其最长的回文子串说明&#xff1a;给定字符串长度为1000以内。思路&#xff1a;for循环遍历字符串&#xff0c;求以i为中心的回文子串长度。与最长回文子串长度max_len比较&#xff0c;若大于max_len&#xff0c;则更新max_len。说明&…

万里长征,始于足下——菜鸟程序员的学习总结

最近一直的谈论如何学习&#xff0c;如何做笔记&#xff0c;学习方法是否正确&#xff1f;&#xff08;发现问题——创新的原动力&#xff09;为什么开始系统化学习了&#xff0c;反而暴露许许多多的问题&#xff1f;细想也并不是很多&#xff0c;这都是过去的遗留问题&#xf…

linux命令添加文件权限,linux 的常用命令及文件权限管理

一些常规命令# 切换目录cd /www/app# 显示当前目录绝对路径pwd# tab键可以自动补全路径&#xff0c;命令&#xff1b;及提示选择&#xff0c;自动补全、避免输入错误、tab# 创建文件夹mkdir test# 创建文件touch 123.txt# 创建文件并打开vi 123.txt# 查看文件、more 之后&#…

SSM整合笔记

SSM整合笔记 1&#xff0c;创建maven项目 创建maven项目过程省略 ps&#xff1a;如果创建完maven项目之后项目报错&#xff0c;可能是没有配置Tomcat 2&#xff0c;在pom.xml里面导入相应的jar的依赖 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…