雅礼集训 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,一经查实,立即删除!

相关文章

多行文本框

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…

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() …

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;后面有用 二、配置远程发布到…

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

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

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

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

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…

linux jetty 安装目录结构,Linux下Jetty 9安装部署

Jetty简介Jetty是一个开源的servlet容器&#xff0c;它为基于Java的web内容&#xff0c;例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的&#xff0c;它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象&#xff0c;可以迅速为一些独立运行(sta…

Bootstrap 学习笔记8 下拉菜单滚动监听

代码部分&#xff1a; <nav class"navbar navbar-default"><a href"#" class"navbar-brand">web开发</a><ul class"nav navbar-nav"><li><a href"#html5">HTML5</a></li>&…

怎么在linux的cmd中运行c项目,如何在cmd窗口编译运行c语言程序?

/这个很简单&#xff0c;只需要下载一个C/C编译器&#xff0c;添加一下环境变量&#xff0c;之后就能在cmd窗口中编译运行C语言程序了&#xff0c;下面我简单介绍一下实现过程&#xff0c;主要内容如下&#xff1a;1.下载C/C编译器&#xff0c;这里可以下载MinGW&#xff0c;包…

HTML基础DW使用教程

1、打开文件拓展名&#xff1a; 方法一.打开计算机→组→文件夹和搜索选项→查看&#xff0c;把隐藏拓展名的勾取掉。 方法二.打开计算机→文件夹选项→查看&#xff0c;把隐藏拓展名的勾取掉。 2.桌面新建一个记事本&#xff0c;把.txt后缀改成HTML。 3.右键打开方式&#xff…

查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...

超好用linux系统查询网卡等流量参数的工具&#xff0c;分享给大家&#xff01;&#xff01;&#xff01;工作中大家或许会遇到这类情况&#xff1a;托管服务器流量超出限额&#xff0c;可是突然又不能像windows主机那样通过QQ管家或者360卫士等软件工具那样很直观的测出服务器的…

WPF的转换器中使用Brush应注意问题

1、Brushes用错了命名空间将导致程序无法正确工作。笔者曾写了一个flag值转换为相应的Brush&#xff0c;由于不小心Using了一个错误的命名空间&#xff08;System.Drawing&#xff09;导致Xaml文件界面元素Fill绑定属性总出不来应有的效果。最后费了好大劲才发现&#xff0c;替…

XamarinAndroid组件教程RecylerView适配器设置动画示例

XamarinAndroid组件教程RecylerView适配器设置动画示例 【示例1-3】下面将在RecylerView的子元素进行滚动时&#xff0c;使用适配器动画。具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;创建一个名为RecylerViewAnimatorsAdapter的项目。 &#xff08;2&#xff09…

linux程序设计知识点整理,笔试面试中C/C++重要知识点整理

4. 类与面向对象编程4.1 类接口与实现的概念&#xff1a;每个类都定义了一个接口(可以不是很确切的理解为类中访问级别为public的函数为接口)和一个实现。接口由使用该类的代码需要执行的操作组成。实现一般包括该类所需要的数据。实现还包括定义该类需要的但又不供一般性使用…

java poi excel 生成表格的工具封装

效果如下&#xff1a; 代码如下&#xff1a; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List;import org.apache.poi.hssf.u…

关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

2019独角兽企业重金招聘Python工程师标准>>> 不听红薯言&#xff0c;吃亏在眼前。 先发表个人意见&#xff0c;Derby是垃圾&#xff0c;H2王道。 这段时间开发movingLife合租记账软件过程中&#xff0c;开始是在MYSQL上做开发&#xff0c;要发布的时候&#xff0c;一…

linux可变剪切分析,SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包...

SpliceR&#xff1a;一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包Kristoffer Knudsen, Johannes Waage5Dec2013翻译&#xff1a;斑斑<23920620>2016年7月14日欢迎加入生物信息QQ群78750864讨论相关问题1简介SpliceR是一个可以对转录本完整isoform(剪接模式…

c语言自定义浮点函数,C语言float

C语言float教程C语言float定义详解语法float varname value;参数参数描述float定义 float 类型变量使用的类型。varname变量名。value可选&#xff0c;变量的初始值。说明使用 float 定义了一个 float 类型的变量 varname&#xff0c;并赋初值为 value。C语言float详解说明描述…