codeforces 486 E. LIS of Sequence(dp)
题目链接:http://codeforces.com/contest/486/problem/E
题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长递增序列的输出2。
如果属于所有最长递增序列的输出3。
题解:这里要用点技巧,不妨设dpBefore[i]表示以第i位为结尾的最长递增序列长,dpAfter[i]表示以第i位为结尾的最长递增序列长。
然后只要满足dpBefore[i]+dpAfter[i]=len(len表示最长递增序列为多长用二分的lis求的),至于这个点是属于所有的递增序列还
是不是,只要存在j使得dpAfter[i]=dpAfter[j],那么就是不属于所有的最长递增序列。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 1e5 + 10;
int a[M] , b[M] , a2[M] , b2[M] , dpBefore[M] , dpAfter[M] , flag[M] , cmp[M];
int binsearch(int num , int sta , int end) {
int l = sta , r = end;
int mid = (l + r) >> 1;
while(l <= r) {
mid = (l + r) >> 1;
if(b[mid] < num) l = mid + 1;
else r = mid - 1;
}
return r;
}
int binsearch2(int num , int sta , int end) {
int l = sta , r = end;
int mid = (l + r) >> 1;
while(l <= r) {
mid = (l + r) >> 1;
if(b2[mid] <= num) l = mid + 1;
else r = mid - 1;
}
return l;
}
int main() {
int n;
scanf("%d" , &n);
memset(cmp , 0 , sizeof(cmp));
for(int i = 1 ; i <= n ; i++) {
scanf("%d" , &a[i]);
a2[i] = a[i];
flag[i] = 0;
}
int len = 1;
b[len] = a[1];
for(int i = 2 ; i <= n ; i++) {
if(a[i] > b[len]) {
b[++len] = a[i];
dpBefore[i] = len - 1;
}
else {
int pos = binsearch(a[i] , 1 , len);
b[pos + 1] = a[i];
dpBefore[i] = pos;
}
}
int len2 = len;
b2[len2] = a[n];
for(int i = n - 1 ; i >= 1 ; i--) {
if(a[i] < b2[len2]) {
b2[--len2] = a[i];
dpAfter[i] = len - len2;
}
else {
int pos = binsearch2(a[i] , len2 , len);
b2[pos - 1] = a[i];
dpAfter[i] = len - pos + 1;
}
} for(int i = 1 ; i <= n ; i++) {
if(dpBefore[i] + dpAfter[i] == len - 1) {
flag[i] = 1;
cmp[dpAfter[i]]++;
}
}
for(int i = 1 ; i <= n ; i++) {
if(flag[i]) {
if(cmp[dpAfter[i]] > 1) {
printf("2");
}
else {
printf("3");
}
}
else {
printf("1");
}
}
printf("\n");
return 0;
}
codeforces 486 E. LIS of Sequence(dp)的更多相关文章
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)
题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 #include <bits/std ...
- codeforces 425C Sereja and Two Sequences(DP)
题意读了好久才读懂....不知道怎么翻译好~~请自便~~~ http://codeforces.com/problemset/problem/425/C 看懂之后纠结好久...不会做...仍然是看题解 ...
- Codeforces 629C Famil Door and Brackets(DP)
题目大概说给一个长m的括号序列s,要在其前面和后面添加括号使其变为合法的长度n的括号序列,p+s+q,问有几种方式.(合法的括号序列当且仅当左括号总数等于右括号总数且任何一个前缀左括号数大于等于右括号 ...
- Arithmetic Sequence(dp)
Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 51 Solved: 19[Submit][Status][We ...
- codeforces #267 C George and Job(DP)
职务地址:http://codeforces.com/contest/467/problem/C 太弱了..这题当时都没做出来..思路是有的,可是自己出的几组数组总是过不去..今天又又一次写了一遍.才 ...
- Codeforces Round #260 (Div. 1) Boredom(DP)
Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- Codeforces 403D: Beautiful Pairs of Numbers(DP)
题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容 ...
- CodeForces B. The least round way(dp)
题目链接:http://codeforces.com/problemset/problem/2/B B. The least round way time limit per test 5 secon ...
随机推荐
- C#中属性的解析
一.域的概念 C#中域是指成员变量和方法,在OOP编程中(面向对象编程)我们要求用户只知道类是干什么的,而不许知道如何完成的,或者说不允许访问类的内部,对于有必要在类外可见的域,我们用属性来表达,所以 ...
- 监控LVS
监控LVS #!/usr/bin/python-2.6.6 #data 2017-10-17 #auth liuchao import commands,os,time #-------------- ...
- 注解与AOP切面编程实现redis缓存与数据库查询的解耦
一般缓存与数据库的配合使用是这样的. 1.查询缓存中是否有数据. 2.缓存中无数据,查询数据库. 3.把数据库数据插入到缓存中. 其实我们发现 1,3 都是固定的套路,只有2 是真正的业务代码.我们可 ...
- Windows 纠错
4:在Windows应用程序中,当需要将窗体显示为模式对话框时,需要调用窗体的()方法.(选择一项)A:Activate()B:ShowDialog()C:Show()D:Close()正确答案是 B ...
- Wpf窗口设置可拖动
在窗口界面的一个控件(TopGrid)设置如下MouseLeftButtonDown事件即可 private void TopGrid_MouseLeftButtonDown(object sende ...
- java基础精选题
Integer比较 看下面这段有意思的代码,对数字比较敏感的小伙伴有没有发现异常? public static void main(String[] args) { Integer a = 128,b ...
- npm 一些有用的提示和技巧
生成 package.json 我们通常执行 npm init,然后开始添加 npm 请求的信息. 但是,如果我们不关心所有这些信息,并且希望保留默认值,那么对于 npm 请求的每一条数据,我们都按 ...
- oracle RAC LOG_ARCHIVE_DEST_1 与 LOG_ARCHIVE_DEST 冲突解决
在做 oracle RAC 归档日志配置时,出现了一个错误,开始看资料的时候, 注意到了 LOG_ARCHIVE_DEST_n 与 LOG_ARCHIVE_DEST 不能同时使用, 但在配置的时候并没 ...
- Docker部署网站之后映射域名
Docker中部署tomcat相信大家也都知道,不知道的可以google 或者bing 一下.这里主要是为了记录在我们启动容器之后,tomcat需要直接定位到网站信息,而不是打开域名之后,还得加个bl ...
- 洛谷 P1903 [国家集训队]数颜色
题意简述 给定一个数列,支持两个操作 1.询问l~r有多少不同数字 2.修改某个数字 题解思路 带修莫队 如果修改多了,撤销修改 如果修改少了,进行修改 代码 #include <cmath&g ...