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. python3.x Day6 socketserver

    socketserver是啥? 简化了编写网络服务器,就是对于socket的再一次封装sockerserver包含4个类可以使用:A=socketserver.TCPServer() #用于TCP/I ...

  2. rbac组件之数据库设计(一)

    rbac是基于角色的权限设计,一共包含六张表,具体的表设计如下: from django.db import models class Menu(models.Model): "" ...

  3. Python 中的变量还能这样理解(白话)

    一.案例分析 1.思考 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 坐标:深圳 # 2018年1月份 # 房租水电 4000元 # 伙食费 1000 ...

  4. hive 删除表内容

    TRUNCATE:truncate用于删除所有的行,这个行为在hive元存储删除数据是不可逆的delect:用于删除特定行条件,你可以从给定表中删除所有的行insert overwrite table ...

  5. table 设置自动宽度后 td 的固定宽度 在 谷歌浏览器自动拉伸

    table   设置自动宽度后   td 的固定宽度  在 谷歌浏览器自动拉伸 解决方案 <table style="table-layout:fixed;">

  6. SQL Server-索引管理

    http://www.2cto.com/database/201305/207508.html SQL Server-索引管理   一.显示索引信息 在建立索引后,可以对表索引信息进行查询. (1)在 ...

  7. [luoguP1022] 计算器的改良(模拟)

    传送门 超级大模拟.. 代码 #include <cstdio> #include <cstring> #include <iostream> #define is ...

  8. 面向对象:元类、异常处理(try...except...)

    元类: python中一切皆对象,意味着: 1. 都可以被引用,如 x = obj 2. 都可以被当做函数的参数传入 3. 都可以被当做函数的返回值 4. 都可以当做容器类的元素(列表.字典.元祖.集 ...

  9. [K/3Cloud] 如何代码中动态设置当前活动页签

    this.GetControl<TabControl>(key).SelectedIndex=目标Index Ps:如下方式隐藏页签: this.View.GetControl(" ...

  10. ***CodeIgnite/CI 去掉 index.php的 配置

    CI有效删除URL中的index.php 参考: http://codeigniter.org.cn/forums/thread-15444-1-1.html 读CI的使用手册的话,关于如何有效删除U ...