题目链接

T1

模拟
#include <cstring>
#include <cstdio>
#define N 105000
int L,R;
char s[N];
int main()
{
freopen("bracket.in","r",stdin);
freopen("bracket.out","w",stdout);
scanf("%s",s);
int len=strlen(s);
for(int i=;i<len;++i)
{
if(s[i]=='(') L++;
else if(s[i]==')'&&L) L--;
else R++;
}
printf("%d",(L+)/+(R+)/);
return ;
}

T2

线段树维护乘车区间的最小值
#include <algorithm>
#include <cstdio>
#define N 55000 struct node
{
int x,y,c;
bool operator<(node a)const
{
return y<a.y;
}
}af[N];
int k,n,m,ans;
namespace Segment
{
struct segment
{
int l,r,mid,val,flag;
segment * ch[];
segment()
{
ch[]=ch[]=NULL;
flag=val=;
}
}*root=new segment;
inline int min(int a,int b){return a>b?b:a;}
void build(segment *&k,int l,int r)
{
k=new segment;
k->l=l;k->r=r;
if(l==r)
{
k->val=m;
return;
}
k->mid=(l+r)>>;
build(k->ch[],l,k->mid);
build(k->ch[],k->mid+,r);
k->val=min(k->ch[]->val,k->ch[]->val);
}
void pushdown(segment *&k)
{
k->ch[]->flag+=k->flag;
k->ch[]->flag+=k->flag;
k->ch[]->val+=k->flag;
k->ch[]->val+=k->flag;
k->flag=;
}
int query(segment *&k,int l,int r)
{
if(k->l==l&&k->r==r) return k->val>=?k->val:;
if(k->flag) pushdown(k);
if(l>k->mid) return query(k->ch[],l,r);
else if(r<=k->mid) return query(k->ch[],l,r);
else return min(query(k->ch[],l,k->mid),query(k->ch[],k->mid+,r));
k->val=min(k->ch[]->val,k->ch[]->val);
}
void modify(segment *&k,int l,int r,int v)
{
if(k->l==l&&k->r==r)
{
k->val+=v;
k->flag+=v;
return;
}
if(l>k->mid) modify(k->ch[],l,r,v);
else if(r<=k->mid) modify(k->ch[],l,r,v);
else modify(k->ch[],l,k->mid,v),modify(k->ch[],k->mid+,r,v);
k->val=min(k->ch[]->val,k->ch[]->val);
}
void init() {build(root,,n);}
int make(int l,int r) {return query(root,l,r);}
void change(int l,int r,int x) {modify(root,l,r,x);}
}
using namespace Segment;
using namespace std;
int main(int argc,char *argv[])
{
scanf("%d%d%d",&k,&n,&m);
for(int i=;i<=k;++i)
{
scanf("%d%d%d",&af[i].x,&af[i].y,&af[i].c);
af[i].y--;
}
std::sort(af+,af++k);
init();
for(int i=;i<=k;++i)
{
int minx=make(af[i].x,af[i].y);
if(minx>=af[i].c) ans+=af[i].c,change(af[i].x,af[i].y,-af[i].c);
else ans+=minx,change(af[i].x,af[i].y,-minx);
}
printf("%d",ans);
return ;
}

T3

枚举左上角 n^2  枚举右下角n^2  枚举修改的数  n^2  求和 n^2  ->  n^8
求一个矩阵和,可以通过矩阵前缀和做到O(1)
枚举左上角 n^2 枚举右下角n^2 枚举修改的数 n^2 -> n^6
预处理出每个矩阵的最小值是多少。 n^4
枚举左上角 n^2 枚举右下角n^2 修改的数已知(修改最小的或者不修改) ->n^4
n,m<=300
假如我们不要求修改数,查询最大子矩阵
有n个数,查询最大子段和 O(n)
for (i=1; i<=n; i++) f[i]=max(f[i-1]+a[i],a[i]);
max{f[i]} = 最大子段和
要求我们修改数
修改的数一定是最小的那个数。
f[i][0]以i结尾并且没有数被修改过的最大和
f[i][1]以i结尾并且有数被修改过的最大和 //a[i] 第i列的和
for (int i=1; i<=n; i++)
{
f[i][0]=max(f[i-1][0]+a[i],a[i]);
f[i][1]=max(f[i-1][1]+a[i],f[i-1][0]+a[i]-MIN[i]+P,a[i]-MIN[i]+P);
}
max{f[?][0/1]} 是答案
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <assert.h>
using namespace std;
int n,m,a[][],MIN[],b[],dp[][],i,j,s[][],ans,P,k;
int main()
{
freopen("puzzle.in","r",stdin);
freopen("puzzle.out","w",stdout);
while (cin>>n)
{
ans=-;
scanf("%d%d",&m,&P); assert(<=n && n<= && <=m && m<= && -<=P && P<=);
for (i=; i<=n; i++)
for (j=; j<=m; j++) {scanf("%d",&a[i][j]); assert(-<=a[i][j] && a[i][j]<=); }
for (i=; i<=n; i++)
for (j=; j<=m; j++)
s[i][j]=s[i-][j]+a[i][j];
for (i=; i<=n; i++)
{
for (j=; j<=m; j++) MIN[j]=a[i][j];
for (j=i; j<=n; j++)
{
for (k=; k<=m; k++) MIN[k]=min(MIN[k],a[j][k]);
for (k=; k<=m; k++) b[k]=s[j][k]-s[i-][k]; dp[][]=-;
for (k=; k<=m; k++) dp[k][]=max(dp[k-][]+b[k],b[k]),dp[k][]=max(max(dp[k-][]+b[k],dp[k-][]+b[k]-MIN[k]+P),b[k]-MIN[k]+P);
for (k=; k<m; k++) ans=max(ans,max(dp[k][],dp[k][]));
if (i== && j==n)
{
ans=max(ans,dp[m][]); int sum=;
for (k=m; k>; k--) {sum+=b[k]; ans=max(ans,sum);}
} else
ans=max(ans,max(dp[m][],dp[m][]));
}
}
cout<<ans<<endl;
}
return ;
}

2017.10.3 QBXT 模拟赛的更多相关文章

  1. 2017.10.7 QBXT 模拟赛

    题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...

  2. 2017.10.6 QBXT 模拟赛

    题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...

  3. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  4. 2017.10.4 QBXT 模拟赛

    题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...

  5. 2017.10.2 QBXT 模拟赛

    题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...

  6. 2017.10.1 QBXT 模拟赛

    题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...

  7. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  8. 2017.10.28 QB模拟赛 —— 下午

    题目链接 T1 按x值排序 遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他 splay multiset cys大佬说 multiset就是不去重的set, #include &l ...

  9. 2017.10.28 QB模拟赛 —— 上午

    题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set  死慢.. #include <cstdio> int t; long long p; int ma ...

随机推荐

  1. 利用 druid 的 sql parser 模块解析 sql 语句

    druid 是阿里开源在 github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块   源码位置: https://github.com/alibaba/druid SQL Parse ...

  2. Jquery中的toggle()方法

    Jquery中的toggle()方法,有一次在看别人写的Jquery插件时,发现对toggle有如下使用 search.pagePrevious.toggle(data.pageNumber > ...

  3. 在Android工程中导入外部动态连接库(so文件)

    假设要导入的so文件命为libtest.so,导入的方法如下: 给工程加入Native Support,将libtest.so复制到在jni文件夹下,在Android.mk文件中,加入以下代码: in ...

  4. HDU - 6156 2017CCPC网络赛 Palindrome Function(数位dp找回文串)

    Palindrome Function As we all know,a palindrome number is the number which reads the same backward a ...

  5. IT兄弟连 JavaWeb教程 异步请求对象的API

    Ajax的核心是XMLHttpRequest对象(xhr),xhr为向服务器发送请求和解析服务器响应提供了接口,能够以异步的方式从服务器获取新数据. xhr的主要方法有: ●  void open(S ...

  6. [转] ios数组基本用法和排序

    http://blog.csdn.net/daiyelang/article/details/18726947 1.创建数组 // 创建一个空的数组 NSArray *array = [NSArray ...

  7. HBase中报错 java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString

    Protobuf(全称 Protocol Buffers)是 Google 开发的一种数据描述语言,能够将结构化数据序列化,可用于数据存储.通信协议等方面.在 HBase 里面用使用了 Protobu ...

  8. 笔记-JavaWeb学习之旅17

    1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...

  9. 【VueJS】VueJS开发请求本地json数据的配置

    VueJS开发请求本地json数据的配置,旧版本是build/dev-server.js,新版本是build/webpack.dev.conf.js. VueJS开发请求本地json数据的配置,早期的 ...

  10. IOS 打包提示错误(ERROR ITMS-90125: ERROR ITMS-90087: ERROR ITMS-90209:)

    提示这种错误是集成环信造成的,解决方法看环信的官方文档: 集成动态库上传AppStore 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平 ...