hdu4638】的更多相关文章

hdu4638 题意 给定一个序列,序列由1-N个元素全排列而成,求任意区间可组成的连续的段数,比如[1,2,4]两段{[1,2],[4]},[1,2,4,3]一段{[1,2,3,4]}. 对于查询的区间询问的是可组成的连续的数的段数最小值. 分析 分块排好序,O(1)的维护就是每新添加一个元素 t 查看 t-1 与 t+1 是否都在区间内,如是则段数-1,如果都不在,则段数+1. code #include<cstdio> #include<cstring> #include&l…
连接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 题意:就给给你n个数(大小在1-n里),然后给你连续的可以构成一个块,再给你N个询问,每个询问一个l,一个r问你l-r里面有多少个连续的段 其实每一个数都是一个独立的段,当有连续的时候连续段数就会-1,因为连续的段中,位置最靠前的哪一个只会影响以这个位置为l的询问,不会影响后面的,所以,我们可以对询问从后向前去找,离线话去找.这样的话就可以用树状数组去解决问题. #include <stdio.h…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 个人认为比较不错的题目. 题意:给一个1-n的排列,询问区间[l,r]的数排序后连续区间的个数. 对于这种题目容易想到对询问离线处理,难点是怎样在logn的时间内求出连续区间的个数.先对询问按右端点y从左到右排序,然后从左到右扫描整个数列,现在考虑加一个数num进去,如果我们前面存在num-1或者num+1,那么数列连续区间的个数是没有增加的,可能还会减少.因此我们可以维护一个数组数组或者线段…
莫队算法基础题,题目看懂就能做出来 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define MAXN 100005 #define ll long long struct Query{ int L,R,id; }q[MAXN]; int s,vis[MAXN],id[…
Problem Description There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and i-1 are friends, Whose ID is i and i+1 are friends. These n men stand in line. Now we select an interval of men to make some group. K men in a group…
There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and i-1 are friends, Whose ID is i and i+1 are friends. These n men stand in line. Now we select an interval of men to make some group. K men in a group can create K*K value…
HDU-4632 Palindrome subsequence 题意:给定一个字符串,长度最长为1000,问该串有多少个回文子串. 分析:设dp[i][j]表示从 i 到 j 有多少个回文子串,则有动态规划方程: str[i] != str[j]:dp[i][j] = dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1];str[i]  = str[j]:dp[i][j] = dp[i+1][j] + dp[i][j-1] + 1. #include <cstdlib>…