T1:loj 6029 市场

题目大意:

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

思路:

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

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

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

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

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

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#define ll long long
#define inf 2147483611
#define MAXN 100100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,q,g[MAXN];
ll sum[MAXN<<],mn[MAXN<<],tag[MAXN<<],mx[MAXN<<];
void upd(int k) {sum[k]=sum[k<<]+sum[k<<|],mn[k]=min(mn[k<<],mn[k<<|]),mx[k]=max(mx[k<<],mx[k<<|]);}
void build(int k,int l,int r)
{
if(l==r) {sum[k]=mn[k]=mx[k]=g[l];return ;}
tag[k]=;
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
upd(k);
}
void pshd(int k,int l,int r)
{
int mid=(l+r)>>;
tag[k<<]+=tag[k],tag[k<<|]+=tag[k];
mn[k<<]+=tag[k],mn[k<<|]+=tag[k];
mx[k<<]+=tag[k],mx[k<<|]+=tag[k];
sum[k<<]+=(mid-l+)*tag[k],sum[k<<|]+=(r-mid)*tag[k];
tag[k]=;
}
void mdfp(int k,int l,int r,int a,int b,int x)
{
if(a==l&&r==b) {sum[k]+=(r-l+)*x,tag[k]+=x,mn[k]+=x,mx[k]+=x;return ;}
int mid=(l+r)>>;
if(tag[k]!=) pshd(k,l,r);
if(b<=mid) mdfp(k<<,l,mid,a,b,x);
else if(a>mid) mdfp(k<<|,mid+,r,a,b,x);
else {mdfp(k<<,l,mid,a,mid,x);mdfp(k<<|,mid+,r,mid+,b,x);}
upd(k);
}
void mdfd(int k,int l,int r,int a,int b,int x)
{
if(l==a&&r==b&&mn[k]-(ll)floor(1.0*mn[k]/x)==mx[k]-(ll)floor(1.0*mx[k]/x))
{
ll tmp=mn[k]-(ll)floor(1.0*mn[k]/x);
sum[k]-=tmp*(r-l+),mn[k]-=tmp,mx[k]-=tmp,tag[k]-=tmp;
return ;
}
int mid=(l+r)>>;
if(tag[k]!=) pshd(k,l,r);
if(b<=mid) mdfd(k<<,l,mid,a,b,x);
else if(a>mid) mdfd(k<<|,mid+,r,a,b,x);
else {mdfd(k<<,l,mid,a,mid,x);mdfd(k<<|,mid+,r,mid+,b,x);}
upd(k);
}
ll querys(int k,int l,int r,int a,int b)
{
if(a==l&&r==b) return sum[k];
int mid=(l+r)>>;
if(tag[k]!=) pshd(k,l,r);
if(b<=mid) return querys(k<<,l,mid,a,b);
else if(a>mid) return querys(k<<|,mid+,r,a,b);
else return querys(k<<,l,mid,a,mid)+querys(k<<|,mid+,r,mid+,b);
}
ll querym(int k,int l,int r,int a,int b)
{
if(a==l&&r==b) return mn[k];
int mid=(l+r)>>;
if(tag[k]!=) pshd(k,l,r);
if(b<=mid) return querym(k<<,l,mid,a,b);
else if(a>mid) return querym(k<<|,mid+,r,a,b);
else return min(querym(k<<,l,mid,a,mid),querym(k<<|,mid+,r,mid+,b));
}
int main()
{
n=read(),q=read();int a,b,c;
for(int i=;i<=n;i++) g[i]=read();
build(,,n);
while(q--)
{
a=read();
if(a==) {a=read(),b=read(),c=read();mdfp(,,n,a+,b+,c);}
else if(a==) {a=read(),b=read(),c=read();mdfd(,,n,a+,b+,c);}
else if(a==) {a=read(),b=read();printf("%lld\n",querym(,,n,a+,b+));}
else if(a==) {a=read(),b=read();printf("%lld\n",querys(,,n,a+,b+));}
}
}

T2:loj 6030 矩阵

题目大意:

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

求最少操作数

思路:

可以先做出一行黑色的

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

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

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#define ll long long
#define inf 2147483611
#define MAXN 1010
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int ok,n,f[MAXN],cnt1[MAXN],cnt2[MAXN],ans;
char maze[MAXN][MAXN];
int main()
{
n=read(),ans=*n+;
for(int i=;i<=n;i++)
{
scanf("%s",maze[i]+);
for(int j=;j<=n;j++)
if(maze[i][j]=='#') f[j]=,ok++;
else cnt1[i]++,cnt2[j]++;
}
if(!ok) {puts("-1");return ;}
for(int i=;i<=n;i++)
ans=min(ans,cnt1[i]+(!f[i]?:));
for(int i=;i<=n;i++)
ans+= cnt2[i]?:;
printf("%d",ans);
}

T3:loj 6031 字符串

雅礼集训 2017 Day1的更多相关文章

  1. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  2. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  3. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  4. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  5. 矩阵[雅礼集训 2017 Day1]

    SOL 奇奇怪怪的贪心(你也不要问我为什么) #include<bits/stdc++.h> #define N 1007 int f[N][N],sum,ans,Ha,bo,n,Ans; ...

  6. loj#6031. 「雅礼集训 2017 Day1」字符串(SAM 广义SAM 数据分治)

    题意 链接 Sol \(10^5\)次询问每次询问\(10^5\)个区间..这种题第一感觉就是根号/数据分治的模型. \(K\)是个定值这个很关键. 考虑\(K\)比较小的情况,可以直接暴力建SAM, ...

  7. loj#6030. 「雅礼集训 2017 Day1」矩阵(贪心 构造)

    题意 链接 Sol 自己都不知道自己怎么做出来的系列 不难观察出几个性质: 最优策略一定是先把某一行弄黑,然后再用这一行去覆盖不是全黑的列 无解当且仅当无黑色.否则第一个黑色所在的行\(i\)可以先把 ...

  8. loj#6029. 「雅礼集训 2017 Day1」市场(线段树)

    题意 链接 Sol 势能分析. 除法是不能打标记的,所以只能暴力递归.这里我们加一个剪枝:如果区间内最大最小值的改变量都相同的话,就变成区间减. 这样复杂度是\((n + mlogn) logV\)的 ...

  9. 【loj6029】「雅礼集训 2017 Day1」市场&&【uoj#228】基础数据结构练习题

    题解: 这两道题加上区间取min max应该算线段树几道比较不寻常的题目 其实也是挺好理解的 对于区间/d 显然在log次后就会等于0 而我们注意到如果区间中数都相等那么就可以一起除 也就是说每个区间 ...

  10. 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...

随机推荐

  1. 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用

    一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...

  2. find -print0和xargs -0原理及用法

    平常我们经常把find和xargs搭配使用,例如: find . -name "*.txt" | xargs rm 但是这个命令如果遇到文件名里有空格或者换行符,就会出错.因为xa ...

  3. js ajax 传送xml dom对象到服务器

    客户端代码 1 <script> var isie = true; var xmlhttp = null; function createXMLHTTP() {//创建XMLXMLHttp ...

  4. Spider-Python爬虫之聚焦爬虫与通用爬虫的区别

    为什么要学习爬虫? 学习爬虫,可以私人订制一个搜索引擎. 大数据时代,要进行数据分析,首先要有数据源. 对于很多SEO从业者来说,从而可以更好地进行搜索引擎优化. 什么是网络爬虫? 模拟客户端发送网络 ...

  5. hdu 4435 bfs+贪心

    /* 题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站).在i点建立加油站需要花费2^i. 建立加油站要求能使得汽车从1点开始走遍全图所有的点并 ...

  6. Linux下汇编语言学习笔记17 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. DELPHI IDFTP

    FTP是一个标准协议,它是在计算机和网络之间交换文件的最简单的方法. FTP也是应用TCP/IP协议的应用协议标准.FTP通常于将作者的文件上传至服务器,或从服务器上下传文件的一种普遍的使用方式作为用 ...

  8. java web 验证码 第一次不正确的问题,解决方案

    首先是form表单 ,获取图片验证码 然后使用js 去服务器验证 问题: 第一次明明输入正确 ,确验证不了??那是因为你在form表单发起请求 和 ajax  发起的请求  地址 中 一个使用127. ...

  9. RabbitMQ集群环境搭建教程收集(待实践)

    先收集,后续再实践. http://www.linuxidc.com/Linux/2016-10/136492.htm http://www.cnblogs.com/lion.net/p/572547 ...

  10. js下载

    下载用ajax不好使,得用表单提交的方式 download:function(url,paramObj){ var doc = document; //使用一个隐藏的form表单执行提交,没有则创建 ...