2019 Multi-University Training Contest 2

1002.Beauty Of Unimodal Sequence

题意:给定一个数组,找出其最长,且字典序最小/大的单峰序列。

我的思路:对于字典序最小,收先需处理$i-n$的包括i数字的最长下降和最长单峰子序列,再从前往后贪心选数且判断该选择是否合法。最长下降可以用以前经典方法,最长单峰可以用线段树维护$l$长单峰序列最后一个值。字典序最大直接反转数组再求一遍即可。

代码:

  1 #include <bits/stdc++.h>
  2 #define lson l,mid,rt<<1
  3 #define rson mid+1,r,rt<<1|1
  4 using namespace std;
  5 
  6 const int N = 3e5 + 5;
  7 
  8 int nod[N<<2];
  9 void build(int l, int r, int rt) {
 10   nod[rt] = 0;
 11   if (l == r) {
 12     return ;
 13   }
 14   int mid = (l+r)>>1;
 15   build(lson);
 16   build(rson);
 17 }
 18 void update(int p, int x, int l, int r, int rt) {
 19   if (l == r) {
 20     if (nod[rt] < x) {
 21       nod[rt] = x;
 22     }
 23     return ;
 24   }
 25   int mid = (l+r)>>1;
 26   if (p <= mid) update(p, x, lson);
 27   else update(p, x, rson);
 28   nod[rt] = max(nod[rt<<1], nod[rt<<1|1]);
 29 }
 30 int query(int x, int l, int r, int rt) {
 31   if (l == r) {
 32     return l;
 33   }
 34   int mid = (l+r)>>1;
 35   if (nod[rt<<1|1] > x) return query(x, rson);
 36   else return query(x, lson);
 37 }
 38 
 39 int a[N];
 40 int c[N];
 41 int suf1[N], suf2[N];
 42 int ans[N];
 43 
 44 void solve(int n, int f)
 45 {
 46   build(1, n, 1);
 47   int l1, l2;
 48   int ansl = 0;
 49   l1 = l2 = c[0] = 0;
 50   for (int i = n - 1; i >= 0; -- i) {
 51     int k = lower_bound(c, c + l1 + 1, a[i]) - c;
 52     c[k] = a[i];
 53     suf1[i] = k;
 54     l1 = max(k, l1);
 55     int ps = 1;
 56     if (nod[1] > a[i]) {
 57       ps = query(a[i], 1, n, 1) + 1;
 58     }
 59     update(ps, a[i], 1, n, 1);
 60     update(l1, a[i], 1, n, 1);
 61     suf2[i] = max(ps, l1);
 62     ansl = max(ansl, suf2[i]);
 63     //cout << i << " " << suf1[i] << " " << suf2[i] << endl;
 64   }
 65   int F = 0; //f = 0 ins : 1 des
 66   int p = 0;
 67   for (int i = 0; i < n; ++ i) {
 68     if (p == 0) {
 69       if (suf2[i] == ansl)
 70         ans[p ++] = i;
 71       continue;
 72     }
 73     if (!F && a[i] > a[ans[p - 1]] && p + suf2[i] == ansl) {
 74       ans[p ++] = i;
 75       continue;
 76     }
 77     if (a[i] < a[ans[p - 1]] && p + suf1[i] == ansl) {
 78       ans[p ++] = i; F = 1;
 79       continue;
 80     }
 81   }
 82   for (int i = 0; i < p; ++ i) {
 83     int pt = n - ans[p - i - 1];
 84     if (f) pt = ans[i] + 1;
 85     printf("%d%c", pt, i == p-1 ? '\n' : ' ');
 86   }
 87 }
 88 
 89 int main()
 90 {
 91   int n;
 92   while (scanf("%d", &n) != EOF) {
 93     for (int i = 0; i < n; ++ i) {
 94       scanf("%d", a + i);
 95     }
 96     solve(n, 1);
 97     for (int i = 0; i < n / 2; ++ i) {
 98       swap(a[i], a[n - i - 1]);
 99     }
100     solve(n, 0);
101   }
102   return 0;
103 }
View Code

1012.Longest Subarray

题意:给定一个数组,找出最长连续子序列使得每种数出现次数均大于$K$。

我的思路:固定右端点,按照数字种类维护每种数字合法左端点,对这些位置$+1$,查询时找出最左边等于$C$的位置即可。

代码:

  1 #include <bits/stdc++.h>
  2 #define lson l,mid,rt<<1
  3 #define rson mid+1,r,rt<<1|1
  4 using namespace std;
  5 
  6 namespace fastIO {
  7   //fread -> read
  8   const int BUF_SIZE = 1000000;
  9   bool IOerror = 0;
 10   inline char nc() {
 11     //FILE* fp=fopen("123.txt","r");
 12     static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;
 13     if(p1 == pend) {
 14       p1 = buf;
 15       pend = buf + fread(buf, 1, BUF_SIZE, stdin);
 16       if(pend == p1) {
 17         IOerror = 1;
 18         return -1;
 19       }
 20     }
 21     return *p1++;
 22   }
 23 
 24   //输入挂,EOF返回0,有输入返回1.
 25   template <class T>
 26   inline bool read(T &ret) {
 27     char c;
 28     if (c=nc(),c==EOF)return 0; //EOF
 29     while(c!='-'&&(c<'0'||c>'9'))c=nc();
 30     int sgn =(c=='-')?-1:1;
 31     ret=(c=='-')?0:(c - '0');
 32     while(c=nc(),c>='0'&&c<='9') ret=ret*10+(c-'0');
 33     ret *= sgn;
 34     return 1;
 35   }
 36   template <class T>
 37   inline void print(T x) {
 38     if(x>9) print(x/10);
 39     putchar(x%10+'0');
 40   }
 41 }; using fastIO::read;
 42 
 43 const int N = 1e5 + 5;
 44 
 45 int seg[N<<2];
 46 int c[N<<2];
 47 
 48 void build(int l, int r, int rt)
 49 {
 50   seg[rt] = c[rt] = 0;
 51   if (l == r) {
 52     return ;
 53   }
 54   int mid = (l+r) >> 1;
 55   build(lson);
 56   build(rson);
 57 }
 58 
 59 void pushdown(int rt)
 60 {
 61   if (c[rt]) {
 62     seg[rt<<1] += c[rt];
 63     seg[rt<<1|1] += c[rt];
 64     c[rt<<1] += c[rt];
 65     c[rt<<1|1] += c[rt];
 66   }
 67   c[rt] = 0;
 68 }
 69 
 70 void update(int L, int R, int x, int l, int r, int rt)
 71 {
 72   if (L <= l && r <= R) {
 73     seg[rt] += x;
 74     c[rt] += x;
 75     return ;
 76   }
 77   pushdown(rt);
 78   int mid = (l + r) >> 1;
 79   if (L <= mid) update(L, R, x, lson);
 80   if (mid < R) update(L, R, x, rson);
 81   seg[rt] = max(seg[rt<<1], seg[rt<<1|1]);
 82 }
 83 
 84 int query(int x, int l, int r, int rt)
 85 {
 86   if (l == r) {
 87     return l;
 88   }
 89   pushdown(rt);
 90   int mid = (l + r) >> 1;
 91   if (seg[rt<<1] == x) return query(x, lson);
 92   else return query(x, rson);
 93 }
 94 
 95 vector<int> p[N];
 96 int a[N];
 97 
 98 int main()
 99 {
100   int n, c, k;
101   while (read(n)) {
102     read(c); read(k);
103     for (int i = 1; i <= c; ++ i) {
104       p[i].clear();
105       p[i].emplace_back(0);
106     }
107     for (int i = 1; i <= n; ++ i) {
108       read(a[i]);
109     }
110     build(1, n, 1);
111     int ans = 0;
112     for (int i = 1; i <= n; ++ i) {
113       p[a[i]].emplace_back(i);
114       int siz = p[a[i]].size();
115       update(i, i, c, 1, n, 1);
116       update(p[a[i]][siz - 2] + 1, i, -1, 1, n, 1);
117       if (siz > k) {
118         update(p[a[i]][siz - k - 1] + 1, p[a[i]][siz - k], 1, 1, n, 1);
119       }
120       if (seg[1] < c) continue;
121       int l = query(c, 1, n, 1);
122       ans = max(ans, i - l + 1);
123     }
124     printf("%d\n", ans);
125   }
126   return 0;
127 }
View Code

 

转载于:https://www.cnblogs.com/UtopioSPH001/p/11261012.html

2019 Multi-University Training Contest 4(2019hdu多校第四场数据与标程).rar 有2019 Multi-University Training Contest 4,hdu多校第四场的题解,数据标程,有需要的可以下载哦 立即下载

相关推荐

BK3437蓝牙5.2芯片实战:手把手教你设计超低功耗智能家居遥控器(附原理图)

本文详细介绍了BK3437蓝牙5.2芯片在超低功耗智能家居遥控器设计中的应用。通过分析芯片的核心优势、硬件设计要点和低功耗固件策略,手把手教你实现日均功耗低于5μA的遥控器原型,并附有原理图设计详解和常见问题解决方案。

tgb34567890的博客 619

HDU校赛 | 2019 Multi-University Training Contest 2

2019 Multi-University Training Contest 2 http://acm.hdu.edu.cn/contests/contest_show.php?cid=849 1005. Everything Is Generated In Equal Probability 考虑一个随机的排列的逆序对个数,显然对于两个数\(a,b\),他们位置是均匀排布的,也就是说有\(\fr...

weixin_30471561的博客 148

虚幻引擎5 AR开发教程02:构建和测试AR Android App

在本教程中,我们将学习如何在虚幻引擎 5 上构建和测试 AR 安卓应用。

mopanchun的博客 2650

2019 Multi-University Training Contest 2 题解&总结

B 只讨论最小字典序的情况,最大字典序同理。设fif_ifi​表示从前往后到第iii位的最长上升子序列。gig_igi​表示从后往前到第iii位的最长上升子序列。然后两个拼接一下即可,这里也只讨论fif_ifi​,gig_igi​同理。我们需要的是更新这两个的最优字典序。可以发现如果不要求字典序,如果我们当前更新第iii位,必然是找{j∣aj&lt;ai}\{j|a_j&lt;a_...

Algor_pro_king_John的博客 350

基于多时间尺度的电动汽车光伏充电站联合分层优化调度(Matlab代码实现)

该研究提出了一种电动汽车光伏充电站的分层优化调度方法,采用日前-日内两阶段协同优化框架。日前阶段通过混合整数规划对多充电站进行全局优化,以平抑电网波动和降低购电成本为目标;日内阶段基于实时数据,采用NSGA-II等算法动态分配充电功率。该方法实现了光伏高效消纳、成本节约和电网负荷平衡的有效统一。

zhangxd212489的博客 518

告别GPS,用Sentinel-1数据+Python实战SBAS-InSAR监测城市地面沉降(保姆级教程)

本文详细介绍了如何利用Sentinel-1数据和Python实现SBAS-InSAR技术监测城市地面沉降。通过保姆级教程,从环境配置、数据获取到干涉处理、时序分析和形变反演,逐步解析全流程技术细节,帮助读者掌握毫米级精度的形变监测方法,并以上海陆家嘴区域为例展示实际应用效果。

weixin_32771907的博客 534

2019 Multi-University Training Contest 2 补题

1011:http://acm.hdu.edu.cn/showproblem.php?pid=6601 题意:给你n个数,q次询问,每次询问一个区间[l,r]表示只能从[l,r]区间里选最大的能构成三角形的三条边,输出其最大周长。 分析:一看肯定说用线段树维护,但。。。。。比赛时想了好久不知道维护什么,甚至还不顾莫队的T飞的复杂度交了几发。 维护一个区间的45个最大值,这样一定能找到周长最大...

shaohang_的博客 211

UCIe相关开源项目记录

目前找到的和UCIe协议有关的5个开源项目,如果也有正在做的朋友,欢迎私信交流

m0_64102565的博客 822

2019 Multi-University Training Contest 2 1011主席树

Problem Description Nsticks are arranged in a row, and their lengths area1,a2,...,aN. There areQquerys. Fori-th of them, you can only use sticks betweenli-th tori-th. Please output the maximum...

xizi_ghq的博客 481

system_stm32f10x.c文件分析

配置系统时钟(包括系统时钟源、锁相环(PLL)倍频系数、高级高性能总线(AHB)/ 高级外设总线(APBx)预分频器以及闪存相关设置)。该函数在系统复位后的启动阶段被调用,且调用时机早于跳转到主程序之前。

Jia shuheng的博客 601

库卡机器人负载设置和自动负载测算

1.1在专家或者以上的权限下—“投入运行”——“工具/基座标管理”—“工具/工件”—添加1.2根据当前的工具所在的tool选择指定工具号;若是没有建立tool需要先建立建立方法看1.3负载数据的填写质量:抓手自重+产品重量总和(需要小于额定负载值)X、Y、Z :总质量的重心位置(基于法兰盘中心的位置计算,如下图的X_FLANGE、Y_FLANGE、Z_FLANGE)【此数据可以根据仿真或者CAD数据得出】A、B、C:是总质量绕着法兰盘中心所安装的角度位置 【此数据可以根据仿真或者CAD数据得出】

weixin_43462131的博客 3101

2019 Multi-University Training Contest 2 Harmonious Army

Harmonious Army Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1280Accepted Submission(s): 464 Problem Description Now, Bob is play...

1999 287

ABAP 里解构引用操作符 ->* 的使用方法详解

解除引用操作符->*可用于将“类型为REF TO …的引用变量”的值(即该引用所指向内存)取出,从而访问其实际值或内部组件。具体地,若dref是一个“引用变量”,则表达式dref->*代表对该引用进行“解除引用”,使得程序按静态类型将其视为实际类型的值对象。例如,若lr类型声明为,则lr->*表示“将 lr 引用的INT4对象看作INT4类型并访问其值”。注:若 “数据引用变量” 的静态类型是通用类型DATA,则只能在这种上下文中使用->*。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 479

HDU 6601 [2019 Multi-University Training Contest 2]

Keen On Everything But Triangle Problem Description N sticks are arranged in a row, and their lengths are a1,a2,…,aN. There are Q querys. For i-th of them, you can only use sticks between li-th to ri-...

给我一把键盘 246

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 2019 Multi-University Training Contest 1 (补题)
arxd45524
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值