题意:

给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多。

输出最大的答案以及交换哪两个元素能够取到这个答案。

$n\leq 3\times 10^5$。

题解:

这位julao讲得很清楚。

这个题值得学习的地方就是把括号序列转化成平面直角坐标系上的折线再进行判断。

将右括号视作-1,左括号视作+1,$sum_{i}$为$1-i$的前缀和,那么一个括号序列合法当且仅当:

1.不存在$i$满足$sum_{i}<0$;

2.$sum_{n}=0$。

容易发现这样判断比用栈模拟适用性广而且扩展性强。

本题中转化序列后使用线段树即可,我使用了一种线性做法。

代码:

  1. #include<bits/stdc++.h>
  2. #define maxn 300005
  3. #define maxm 500005
  4. #define inf 0x7fffffff
  5. #define ll long long
  6.  
  7. using namespace std;
  8. int N,sum[maxn]; char str[maxn<<];
  9.  
  10. inline int read(){
  11. int x=,f=; char c=getchar();
  12. for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
  13. for(;isdigit(c);c=getchar()) x=x*+c-'';
  14. return x*f;
  15. }
  16.  
  17. int main(){
  18. N=read(),scanf("%s",str+);
  19. int pos=,mn=inf;
  20. for(int i=;i<=N;i++) str[i+N]=str[i];
  21. for(int i=;i<=N;i++){
  22. sum[i]=sum[i-]+((str[i]==')')?-:);
  23. if(sum[i]<mn) mn=sum[i],pos=i;
  24. }
  25. for(int i=pos+;i<=pos+N;i++)
  26. sum[i-pos]=sum[i-pos-]+((str[i]==')')?-:);
  27. if(sum[N]!=){printf("0\n1 1\n");return ;}
  28. int ans=,mxans=,p1=,p2=;
  29. for(int i=;i<=N;i++)
  30. if(sum[i]==) ans++;
  31. for(int i=;i<=N;){
  32. int j=i; while(j<=N && sum[j+]!=) j++; j++;
  33. int n1=,n2=,t1=,t2=,mxn2=,las1=i;
  34. for(int k=i;k<=j;k++){
  35. if(sum[k]==){
  36. if(mxn2<n2) mxn2=n2,t1=las1+,t2=k;
  37. n2=,n1++,las1=k;
  38. }
  39. if(sum[k]==) n2++;
  40. }
  41. if(mxn2<n2) mxn2=n2,t1=las1+,t2=j;
  42. if(mxans<mxn2+ans) mxans=mxn2+ans,p1=t1,p2=t2;
  43. if(mxans<n1) mxans=n1,p1=i,p2=j; i=j+;
  44. }
  45. //cout<<p1<<" "<<p2<<endl;
  46. printf("%d\n%d %d\n",mxans,(p1+pos-)%N+,(p2+pos-)%N+);
  47. return ;
  48. }

B

[cf 1239 B] The World Is Just a Programming Task (Hard Version)的更多相关文章

  1. CF The World Is Just a Programming Task (Easy Version)【分析·思维】

    题目传送门 题意: 给定一个括号序列,随意交换两个位置的括号之后,问有多少个不同长度的圈.关于圈的定义大概就是:将括号序列的后$k$个数放到括号序列的最前面,就是长度为$k$的圈.(看了好久题意emm ...

  2. 一句话CF

    目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ C ...

  3. Codeforces Round #594 (Div. 1)

    Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...

  4. cf 之lis+贪心+思维+并查集

    https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...

  5. HBase 数据模型(Data Model)

    HBase Data Model--HBase 数据模型(翻译) 在HBase中,数据是存储在有行有列的表格中.这是与关系型数据库重复的术语,并不是有用的类比.相反,HBase可以被认为是一个多维度的 ...

  6. IOS - Foundation和Core Foundation掺杂使用桥接

    Foundation和Core Foundation掺杂使用桥接 Toll-Free Bridging 在cocoa application的应用中,我们有时会使用Core Foundation(CF ...

  7. Cloud Foundry v2 部署及入门运维

    之前写过一个Guide for Cloud Foundry New Teamer.不过似乎已经有些过时,那会实验室主要是针对的CF v1进行的研究,现在已经全面进入V2时代了.所以更新一下关于Clou ...

  8. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- MC9S08JS16

    Introduction The attached files provide a port of a combined TBDML/OSBDM code to a MC9S08JS16 proces ...

  9. Github上的1000多本免费电子书重磅来袭!

    Github上的1000多本免费电子书重磅来袭!   以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...

随机推荐

  1. x64汇编第四讲,c / C++中调用x64汇编

    目录 x64汇编第四讲,c / C++中调用x64汇编 一丶简介 1.说明 二丶C/C++调用 asm64.asm函数. 1.配置asm参与生成 2.给Asm文件添加函数代码 3.C/C++调用asm ...

  2. 轮播模仿臭美APP,vue,swiper

    介绍:轮播使用了swiper,重要用于移动端滑动,详情可查看官网 1.首先用npm安装        npm install swiper 2.main.js 中引入CSS     import 's ...

  3. /etc/resolv.conf options rotate

    timeout:n sets  the  amount  of time the resolver will wait for a response from a remote name server ...

  4. Django实现自动发布(3发布-升级和回退)

    发布实际上就是将服务的某个版本和一台主机关联,我用一张表(MicroServiceInstance)记录了主机id.服务id.版本id,目前一台主机只能部署一个版本,所以主机id和服务id要做联合索引 ...

  5. anchor_based-anchor_free object detectors

    同步到知乎anchor_based-anchor_free object detectors 前言:最近关注了大量目标检测的论文,比较火的就是anchor based和anchor free两类问题: ...

  6. java wait方法

    wait方法是让当前线程等待,这里的当前线程不是指t,而是主线程. wait会释放锁,等到其他线程调用notify方法时再继续运行. 可以看下面的例子. 1 package com.citi.test ...

  7. JCR分区 | 中科院SCI期刊分区表

    LetPub查询系统,非常方便,分区影响因子都可以查询,还有投稿经验可以参考. SCI全称是Science Citation Index(科学引文索引) 科睿唯安JCR分区(Journal Citat ...

  8. paddlepaddle如何预加载embedding向量

    使用小批量数据时,模型容易过拟合,所以需要对全量数据进行处理,我是用的是word2vec训练的词向量. 那么训练好对词向量如何加载呢? #!/usr/bin/env python # -*- codi ...

  9. mongo 分片机如何建立库和实例(数据表)

    mongo分片创建表和实例 第一步:首先在admin账户下: mongo 'mongodb://root:abcccSRP@s-2ze333323gggg.mongodb.rds.aliyuncs.c ...

  10. Scrapy爬虫Demo 爬取资讯分类

    爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(sys) sys.se ...