算法竞赛训练实录

[toc]

Codeforces Round 603

ABCD

都是很水的题。 cout << 000输出0,而cout<<"000"才输出000,因为这个WA6次要被笑(打)死。

E

判定括号序列合法性:每一个前缀和不小于0,同时最后一个前缀和等于0.线段树更新即可.新技能Get.

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int minz[maxn*4],tg[maxn*4],maxz[maxn*4],tg2[maxn*4];
char s[maxn];
inline int ls(int x){
	return x<<1;
}
inline int rs(int x){
	return x<<1|1;
}
void pushdown(int rt){
	if(tg[rt]==0) return;
	minz[ls(rt)]+=tg[rt];
	tg[ls(rt)]+=tg[rt];
	minz[rs(rt)]+=tg[rt];
	tg[rs(rt)]+=tg[rt];
	tg[rt]=0;
}
void pushdown2(int rt){
	if(tg2[rt]==0) return;
	maxz[ls(rt)]+=tg2[rt];
	tg2[ls(rt)]+=tg2[rt];
	maxz[rs(rt)]+=tg2[rt];
	tg2[rs(rt)]+=tg2[rt];
	tg2[rt]=0;
}
int upd(int il,int ir,int d,int rt,int l,int r){
	if(il>r||ir<l) return minz[rt];
	if(l>=il&&r<=ir){
		minz[rt]+=d;
		tg[rt]+=d;
		return minz[rt];
	}
	pushdown(rt);
	int mid=(l+r)>>1;
	return minz[rt]=min(upd(il,ir,d,ls(rt),l,mid),upd(il,ir,d,rs(rt),mid+1,r));
}
int ask(int il,int ir,int rt,int l,int r){
	if(il>r||ir<l) return 0x3f3f3f3f;
	if(l>=il&&r<=ir) return minz[rt];
	pushdown(rt);
	int mid=(l+r)>>1;
	return min(ask(il,ir,ls(rt),l,mid),ask(il,ir,rs(rt),mid+1,r));
}
int upd2(int il,int ir,int d,int rt,int l,int r){
	if(il>r||ir<l) return maxz[rt];
	if(l>=il&&r<=ir){
		maxz[rt]+=d;
		tg2[rt]+=d;
		return maxz[rt];
	}
	pushdown2(rt);
	int mid=(l+r)>>1;
	return maxz[rt]=max(upd2(il,ir,d,ls(rt),l,mid),upd2(il,ir,d,rs(rt),mid+1,r));
}
int ask2(int il,int ir,int rt,int l,int r){
	if(il>r||ir<l) return 0;
	if(l>=il&&r<=ir) return maxz[rt];
	pushdown2(rt);
	int mid=(l+r)>>1;
	return max(ask2(il,ir,ls(rt),l,mid),ask2(il,ir,rs(rt),mid+1,r));
}
int st[maxn];
int main(){
	int n;
	scanf("%d",&n);
	scanf("%s",s+1);
	int cur=1;
	for(int i=1;i<=n;i++){
		if(s[i]==‘L‘) cur=max(1,cur-1);
		else if(s[i]==‘R‘) {
			cur++;
		}
		else if(s[i]==‘(‘) {
			if(st[cur]==1) ;
			else if(st[cur]==0){
				st[cur]=1;
				upd(cur,n,1,1,1,n);
				upd2(cur,n,1,1,1,n);
			}
			else {
				st[cur]=1;
				upd(cur,n,2,1,1,n);
				upd2(cur,n,2,1,1,n);
			}
		}
		else if(s[i]==‘)‘){
			if(st[cur]==-1);
			else if(st[cur]==0){
				st[cur]=-1;
				upd(cur,n,-1,1,1,n);
				upd2(cur,n,-1,1,1,n);
			}
			else {
				st[cur]=-1;
				upd(cur,n,-2,1,1,n);
				upd2(cur,n,-2,1,1,n);
			}
		}
		else{
			if(st[cur]==0) ;
			else if(st[cur]==1){
				st[cur]=0;
				upd(cur,n,-1,1,1,n);
				upd2(cur,n,-1,1,1,n);
			}
			else {
				st[cur]=0;
				upd(cur,n,1,1,1,n);
				upd2(cur,n,1,1,1,n);
			}
		}
		if(ask(1,n,1,1,n)>=0&&ask(n,n,1,1,n)==0){
			printf("%d ", ask2(1,n,1,1,n));
		}
		else printf("-1 ");
	}
	return 0;
}

原文地址:https://www.cnblogs.com/vege-chicken-rainstar/p/11980524.html

时间: 2024-10-15 23:47:54

算法竞赛训练实录的相关文章

算法竞赛训练指南2.1 计数方法

1. O(n)方法求C(n,m) 利用公式C(n,k+1)=C(n,k)*(n-k)/(k+1) 模板: #include <iostream> #include <algorithm> using namespace std; typedef unsigned long long LL; const int maxn=100005; LL n,m; LL C() { if(m==0||n==m) return 1; if(m>n-m) m=n-m; LL ans,temp=

算法竞赛入门经典训练指南

最近在看算法竞赛入门经典训练指南这本书,书中不错的算法我将在博客中发布,和大家共同学习. 题目: 在你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个能力值为m的骑士可以砍掉一个直径不超过x的头,且需要支付x个金币.如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次). 输入格式: 输入包含多组数据.每组数据的第一行为正整数m和n(1<=m,n<=20 000):以下m行每行为一个整数,即恶龙每

算法竞赛入门经典-训练指南(10881-Piotr&#39;s Ants)

题目大意: 一根长度为L的木棍一堆蚂蚁爬,向左或向右,速度都为1,若两蚂蚁碰撞则同时转头(转身时间忽略不计),问T时间之后每只蚂蚁的位置: 输入:t,(t个样例),每个样例输入 L,T,n,接下来是n行每行两个数据,一个POS(位置),一个dir(方向): 输出:按输入顺序输出每只蚂蚁的最终位置,若处于碰撞状态则输出Turning,掉下去输出"Fell off": 解题思路: 本题类似于<挑战程序设计>的一道水题(POJ -1852  Ants),思路题:不过本题输入并不一

HDU-AcmKeHaoWanLe训练实录

菜鸡队训练实录. 现场赛记录:[名称:奖项/排名] 2017: To do List: 一有空就训练 战术研究: 读新题的优先级高于一切 读完题之后必须看一遍clarification 交题之前必须看一遍clarification 可能有SPJ的题目提交前也应该尽量做到与样例输出完全一致 WA时需要检查INF是否设小 构造题不可开场做 每道题需至少有两个人确认题意 上机之前做法需得到队友确认 带有猜想性质的算法应放后面写 当发现题目不会做但是过了一片时应冲一发暴力 将待写的题按所需时间放入小根堆

HDU-SupportOrNot训练实录

菜鸡队训练实录. 现场赛记录: 2016:[名称:奖项/排名] ZJPSC:Gold/1 CCPC中南邀请赛:Gold/1 ICPC Dalian:Gold/24 ICPC Beijing:??? CCPC Final:??? ICPC China-Final:??? To do List: 所有人需要提高效率 减小罚时 三人组队训练时必须用指定Ubuntu电脑敲题,其他两台电脑只能读题.读代码 为提升代码能力,poursoul和_ilovelife尽量做到每天solo一套简单GYM,也可以视情

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

深度学习攻防对抗(JCAI-19 阿里巴巴人工智能对抗算法竞赛)

最近在参加IJCAI-19阿里巴巴人工智能对抗算法竞赛(点击了解),初赛刚刚结束,防御第23名,目标攻击和无目标攻击出了点小问题,成绩不太好都是50多名,由于找不到队友,只好一个人跟一群大佬PK,双拳难敌四手,差点自闭放弃比赛了.由于知道对抗攻击的人很少,于是抽空写篇博客,简单科普一下人工智能与信息安全的交叉前沿研究领域:深度学习攻防对抗. 然后简单介绍一下IJCAI-19 阿里巴巴人工智能对抗算法竞赛 目前,人脸识别.自动驾驶.刷脸支付.抓捕逃犯.美颜直播……人工智能与实体经济深度结合,彻底改