C. Destroying Array

题意:对样例进行分析:

,n == 4,数组是1 3 2 5,然后下一行就是每一个数就得输出,代表的是删除数组中的第几个数,然后在删除后的数组中找到分成的段的和最大。

思路:当时一看到就想到了线段树,可以并不会线段树。。。

后面看到大神的博客,用并查集倒着写!,高手呀;

倒着写就是对第三行的数倒着操作,相当于每次都往数组中的这个位置插入这个元素,然后用并查集进行合并,然后判断最大的哪一段输出;

#include<bits/stdc++.h>
using namespace std;
const int maxn  = 100000 + 10;
typedef __int64 ll;ll n;
ll pre[maxn];
ll a[maxn],b[maxn];
bool vis[maxn];
ll value[maxn];
void Init()
{for(ll i = 1;i <= n ;i ++){pre[i] = i;value[i] = a[i];}
}
ll finds(ll x)
{ll r = x;while(r != pre[r]){r = pre[r];}ll i = x, j;while(i != r){ll j = pre[i];pre[i] = r;i = j;}return r;
}
void join(ll x,ll y)
{ll fx = finds(x), fy = finds(y);if(fx != fy){pre[fx] = fy;value[fy] += value[fx];}
}
int main()
{while( ~ scanf("%lld",&n) ){memset(vis,false,sizeof(vis));for(ll i = 1; i <= n ;i ++){scanf("%lld",&a[i]);}for(ll i = 1; i <= n ; i ++){scanf("%lld",&b[i]);}Init();stack<ll>s;s.push(0);ll ans = 0;for(ll i = n ;i >= 2 ;i --){ll poll = b[i];vis[poll] = true;if(vis[poll - 1]){join(poll,poll - 1);}if(vis[poll + 1]){join(poll, poll + 1);}ll temp = value[finds(poll)];if(temp > ans )ans = temp;
//            cout << poll << " " << ans <<endl;s.push(ans);}while( ! s.empty()){cout << s.top() <<endl;s.pop();}}return 0;
}
下面顺便副上这次的A,B题吧:
A. Broken Clock
#include <bits/stdc++.h>
using namespace std;
int main()
{int num;cin >> num;string str;cin >> str;int h = (str[0] - '0') * 10 + str[1] - '0';int m = (str[3] - '0') * 10 + str[4] - '0';if(num == 12){if(h == 0)h = 1;else if(h > 12){if(h % 10 == 0){h = 10;}else{while(h > 10){h -= 10;}}}}else{while(h > 23){h -= 10;}}while(m >= 60){m -= 10;}if(h < 10){cout << 0;}cout << h<< ":";if(m < 10){cout << 0;}cout << m << endl;;
}

B. Verse Pattern

#include<bits/stdc++.h>
using namespace std;
const int maxn  = 100000 + 10;
typedef __int64 ll;
char s[maxn/100][maxn/100];
int num[maxn/100];
int n;
int solve()
{for(int i = 1; i <= n;i ++){int len = strlen(s[i]);int temp = 0;for(int j = 0; j < len ; j ++){if(s[i][j] == 'a' || s[i][j] == 'e' ||s[i][j] == 'i' ||s[i][j] == 'o' ||s[i][j] == 'u'||s[i][j] == 'y')temp ++;}if(temp != num[i])return 0;}return 1;
}
int main()
{while( ~ scanf("%d",&n) ){for(int i = 1;i <= n ; i ++){scanf("%d",&num[i]);}getchar();for(int i = 1; i <= n ;i ++){gets(s[i]);}if(solve())cout << "YES" <<endl;else cout << "NO" <<endl;}return 0;
}

并查集巧妙用法(codeforces)C. Destroying Array相关推荐

  1. CodeForces - 722C Destroying Array(倒着并查集+离线处理)

    题目链接:点击查看 题目大意:给出一个数列a,现在给出操作b,每次操作都会删除掉数列a中指定位置的数,问每次删除后,最大连续字段和是多少 题目分析:一开始看到最大连续字段和,以为是要用dp,又看了一下 ...

  2. CodeForces - 722C Destroying Array (并查集/集合的插入和删除)

    原题链接:https://vjudge.net/problem/511814/origin Description: You are given an array consisting of n no ...

  3. c 语言中并查集的用法,并查集基本介绍

    前言 今天在力扣上做了一道每日一题,接触到了并查集这个概念,以前没有了解过,记录在此. 定义 并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询两种操作的一种数据 ...

  4. Codeforces 722C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Codeforces C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. CodeForces 722C Destroying Array

    并查集,离线操作. 将操作倒着进行,一开始所有数字都没有加入到数组中,然后倒着一个一个加入,更新最大值. #pragma comment(linker, "/STACK:1024000000 ...

  7. codeforces 722C Destroying Array

    题意:给出长度为n的序列,每次去掉一个数,使得序列分成几块,问当前权值最大块的权值. 思路:提供两种,第一种用multiset和前缀和直接暴力模拟. 第二种用并差集,假设坐标i为一个去掉的数,那么f[ ...

  8. 漫画:什么是 “并查集” ?

    作者 | 封承成 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 导语:并查集是一种精巧的算法,本身并不难理解,却很常用,在许多场景下都能找到并查集的身影. 本文作者封承成,年仅1 ...

  9. 什么是 “并查集” ?

    导语:并查集是一种精巧的算法,本身并不难理解,却很常用,在许多场景下都能找到并查集的身影. 本文作者封承成,年仅12岁,非常感谢他的投稿. 并查集是什么 并查集,是一种判断"远房亲戚&quo ...

最新文章

  1. mysql union order_MySQL中union和order by同时使用的实现方法
  2. 计算机组成要素一:布尔逻辑:门结构
  3. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 * 第10次落地时,共经过多少米?第10次反弹多高?
  4. 修改ubuntu的IP地址,静态IP地址
  5. 操作系统学习笔记-01-操作系统的概念(定义),功能和目标
  6. Linux笔记-手动配置yum及光盘安装rz
  7. 【C语言】一堆数组中存放了10个小于100的整数,请编程对所有数据按照从小到大的顺序进行排序,若个位数相等,则按照十位从小到大的顺序排序,输出排序后的结果...
  8. 聊聊 | 他在Google Play安全奖励计划贡献榜单上排名第一
  9. Linux之atime,ctime,mtime的区别
  10. wamp怎么安装mysql服务器_使用WAMPServer套件可安装Apache服务器和MySQL服务器
  11. 使用DSIM给WIN7集成SP2、IE11、USB3
  12. c g位置服务器,C32/G34平台铺路 AMD为十二核CPU蓄势
  13. JavaScript 下载文件并保持原文件名称
  14. 自动驾驶中车辆的如何使用点云定位?
  15. AlphaGo开源代码
  16. vmware使用显卡
  17. 球面坐标系转换为笛卡尔坐标系
  18. 计算机辅助翻译专业实训报告,计算机辅助翻译实训报告格式.doc
  19. 运营简史:互联网运营的20年发展与演变
  20. CN_计算机网络体系结构概念@IP数据报(分组)结构@各层报文(PDU)之间的关系@PDU协议数据单元

热门文章

  1. 获取手机唯一标识插件_H5能获取到手机设备ID或者手机浏览器唯一识别码吗
  2. 【生信分析】生物分子网络构建基础——酶动力学
  3. contiki学习笔记(四)、contiki系统UDP通信原理(单播、多播、RPL介绍)
  4. ACCESS实例2 资料管理1——表、表关系与查询
  5. 免费WiFi分享给你,全民免费WiFi来袭
  6. PHP复合函数,复合函数中的剥洋葱理论
  7. 怎样用自己电脑做服务器供他人访问自己的网站
  8. NEAT(基于NEAT-Python模块)实现监督学习和强化学习
  9. 勾号、叉号、圈号的收集
  10. 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)