雅礼集训 2017 Day1
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的更多相关文章
- 「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
- [LOJ 6031]「雅礼集训 2017 Day1」字符串
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
- [LOJ 6030]「雅礼集训 2017 Day1」矩阵
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...
- [LOJ 6029]「雅礼集训 2017 Day1」市场
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...
- 矩阵[雅礼集训 2017 Day1]
SOL 奇奇怪怪的贪心(你也不要问我为什么) #include<bits/stdc++.h> #define N 1007 int f[N][N],sum,ans,Ha,bo,n,Ans; ...
- loj#6031. 「雅礼集训 2017 Day1」字符串(SAM 广义SAM 数据分治)
题意 链接 Sol \(10^5\)次询问每次询问\(10^5\)个区间..这种题第一感觉就是根号/数据分治的模型. \(K\)是个定值这个很关键. 考虑\(K\)比较小的情况,可以直接暴力建SAM, ...
- loj#6030. 「雅礼集训 2017 Day1」矩阵(贪心 构造)
题意 链接 Sol 自己都不知道自己怎么做出来的系列 不难观察出几个性质: 最优策略一定是先把某一行弄黑,然后再用这一行去覆盖不是全黑的列 无解当且仅当无黑色.否则第一个黑色所在的行\(i\)可以先把 ...
- loj#6029. 「雅礼集训 2017 Day1」市场(线段树)
题意 链接 Sol 势能分析. 除法是不能打标记的,所以只能暴力递归.这里我们加一个剪枝:如果区间内最大最小值的改变量都相同的话,就变成区间减. 这样复杂度是\((n + mlogn) logV\)的 ...
- 【loj6029】「雅礼集训 2017 Day1」市场&&【uoj#228】基础数据结构练习题
题解: 这两道题加上区间取min max应该算线段树几道比较不寻常的题目 其实也是挺好理解的 对于区间/d 显然在log次后就会等于0 而我们注意到如果区间中数都相等那么就可以一起除 也就是说每个区间 ...
- 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...
随机推荐
- assert.ok()详解
assert.ok(value[, message]) 测试 value 是否为真值.它等同于 assert.equal(!!value, true, message). 如果 value 不是真值, ...
- Python之面向对象元类
Python之面向对象元类 call方法: class People: def __init__(self,name): self.name=name # def __call__(self, *ar ...
- django+uwsgi+nginx部署(非常详细)
django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...
- 【转载】什么是Zero-Copy
转载:https://blog.csdn.net/u013256816/article/details/52589524 概述 考虑这样一种常用的情形:你需要将静态内容(类似图片.文件)展示给用户.那 ...
- LeetCode(41)First Missing Positive
题目 Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2 ...
- 大数据平台消息流系统Kafka
Kafka前世今生 随着大数据时代的到来,数据中蕴含的价值日益得到展现,仿佛一座待人挖掘的金矿,引来无数的掘金者.但随着数据量越来越大,如何实时准确地收集并分析如此大的数据成为摆在所有从业人员面前的难 ...
- 文件 jq 传到后台
XMLHttpRequest Level 2 添加了一个新的接口——FormData.与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件. jQuery 2.0 ...
- BootStrap3栅格系统与布局
栅格系统与布局 Use our powerful mobile-first flexbox grid to build layouts of all shapes and sizes thanks t ...
- cogs——7. 通信线路
7. 通信线路 ★★ 输入文件:mcst.in 输出文件:mcst.out 简单对比时间限制:1.5 s 内存限制:128 MB 问题描述 假设要在n个城市之间建立通信联络网,则连通n ...
- idea中javaweb的mysql8.0.15配置问题
mysql8.0.x以后的版本在连接数据库的时候有些不同. 首先: Class.forName("com.mysql.cj.jdbc.Driver"); 其次: DriverMan ...