群赛 ZOJ3741(dp) ZOJ3911(线段树)
zoj3741
简单dp。wa了两个小时,中间改了好多细节。后来还是不对,参考了别人的代码,发现一个致命问题,初始化的时候,不是每种状态都能直接达到的。初始化成-1。
(题目有个小坑,0<=L<=5, 即使吃药了,也不能到6 )
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#define pk printf("lalala");
using namespace std;
#define PI acos(-1.0)
#define EXP exp(1.0) // 自然对数
#define ESP 1E-6
#define clr(x,c) memset(x,c,sizeof(x))
typedef long long ll;
const int N = 105;
int dp[N][2*N];
int a[N]; void print()
{
for (int k = 1; k <= 6; ++k) {
for (int i = 98; i <= 101; ++i)
printf("%d ", dp[k][i]);
printf("\n");
} } int main()
{
int l, n, x, y;
while (~scanf("%d%d%d%d", &l, &n, &x, &y)) {
clr(dp, -1);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
dp[0][100] = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 100 - y; j <= 100 + x; ++j) {
if (j == 100 - y) {
if (dp[i - 1][100 + x] == -1) continue;
if (0 >= a[i]) dp[i][j] = dp[i - 1][100 + x] + 1;
else dp[i][j] = dp[i - 1][100 + x];
} else if (j < 100) {
if (dp[i - 1][j - 1] == -1) continue;
if (0 >= a[i]) dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = dp[i - 1][j - 1];
} else if (j == 100 + 1) {
if (dp[i - 1][j - 1] == -1 && dp[i - 1][100 - 1] == -1) continue;
if ((l + 1 <= 5 && l + 1 >= a[i]) || l >= a[i]) {
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][100 - 1]) + 1;
} else {
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][100 - 1]);
}
} else if (j > 100) {
if (dp[i - 1][j - 1] == -1) continue;
if ((l + 1 <= 5 && l + 1 >= a[i]) || l >= a[i]) dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = dp[i - 1][j - 1];
} else {
if (dp[i - 1][j] == -1 && dp[i - 1][100 - 1] == -1) continue;
if (l >= a[i]) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][100 - 1]) + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][100 - 1]);
}
}
}
}
int ans = 0;
for (int i = 100 - y; i <= 100 + x; ++i) {
ans = max(ans, dp[n][i]);
}
//print();
printf("%d\n", ans);
}
return 0;
} /*
3 6 1 2
1 3 4 5 6 4 0 6 3 1
1 0 1 0 1 0 3 6 1 3
3 4 3 3 4 4 3 6 1 2
3 4 3 4 3 4 3 6 1 2
4 5 4 5 4 5 5 6 1 2
6 5 6 4 5 6 5 6 2 3
6 5 6 5 6 5 4 6 1 6
5 5 5 5 5 5 4 6 5 2
5 5 0 0 5 5 4
6
4
4
2
3
3
1
5
*/
zoj 3911
线段树区间更新,点更新,区间查询。好久不写,不是很会写了 (尴尬 - -#)
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <utility> // pair
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#define pk printf("lalala");
using namespace std;
#define PI acos(-1.0)
#define EXP exp(1.0) // 自然对数
#define ESP 1E-6
#define clr(x,c) memset(x,c,sizeof(x))
typedef long long ll; const int MAX_N = 10000005;
int prime[MAX_N];
bool is_prime[MAX_N]; int sieve(int n)
{
int p = 0;
for (int i = 0; i <= n; ++i) is_prime[i] = true;
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
prime[p++] = i;
for (int j = 2 * i; j <= n; j += i)
is_prime[j] = false;
}
}
return p;
} #define lson (o<<1)
#define rson (o<<1|1)
#define mid ((l+r)>>1) const int N = 100005;
int tr[N * 3];
int ans[N * 3];
int v, yl, yr; void pushup(int o)
{
ans[o] = ans[lson] + ans[rson];
} void build(int o, int l, int r)
{
if (l == r) {
scanf("%d", &tr[o]);
if (is_prime[ tr[o] ]) ans[o] = 1;
else ans[o] = 0;
return ;
}
build(lson, l, mid);
build(rson, mid + 1, r);
pushup(o);
} void pushdown(int o, int l, int r)
{
if (tr[o] == 0) return ;
tr[lson] = tr[rson] = tr[o];
if (is_prime[ tr[o] ]) {
ans[lson] = mid - l + 1;
ans[rson] = r - mid;
} else {
ans[lson] = ans[rson] = 0;
}
tr[o] = 0;
} void add(int o, int l, int r)
{
if (l == r) {
tr[o] += v;
if (is_prime[ tr[o] ]) ans[o] = 1;
else ans[o] = 0;
return ;
}
pushdown(o, l, r);
if (mid >= yl) add(lson, l, mid);
else add(rson, mid + 1, r);
pushup(o);
} void update(int o, int l, int r)
{
if (yl <= l && yr >= r) {
tr[o] = v;
if (is_prime[v]) {
ans[o] = r - l + 1;
} else {
ans[o] = 0;
}
return ;
}
pushdown(o, l, r);
if (yl <= mid) update(lson, l, mid);
if (yr > mid) update(rson, mid + 1, r);
pushup(o);
} int query(int o, int l, int r)
{
if (yl <= l && yr >= r) return ans[o];
pushdown(o, l, r);
int res = 0;
if (yl <= mid) res += query(lson, l, mid);
if (yr > mid) res += query(rson, mid + 1, r);
return res;
} int main()
{
sieve(10000000); int t;
scanf("%d", &t);
while (t--) {
int n, q;
scanf("%d%d", &n, &q);
clr(tr, 0);
build(1, 1, n); while (q--) {
char op[4];
scanf("%s", op);
if (*op == 'A') {
scanf("%d%d", &v, &yl);
add(1, 1, n);
} else if (*op == 'R') {
scanf("%d%d%d", &v, &yl, &yr);
update(1, 1, n);
} else {
scanf("%d%d", &yl, &yr);
printf("%d\n", query(1, 1, n));
}
}
} return 0;
}
群赛 ZOJ3741(dp) ZOJ3911(线段树)的更多相关文章
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
- LightOJ 1085(树状数组+离散化+DP,线段树)
All Possible Increasing Subsequences Time Limit:3000MS Memory Limit:65536KB 64bit IO Format: ...
- BZOJ 1835: [ZJOI2010]base 基站选址(DP,线段树)
可以很容易的写出dp方程: F[i][j]=min(F[l][j-1]+w[l][i])+c[i] (w[i][j]是从l+1到i-1这些点p里,所有满足d[p]+s[p]<d[i] & ...
- Codeforces 671D Roads in Yusland [树形DP,线段树合并]
洛谷 Codeforces 这是一个非正解,被正解暴踩,但它还是过了. 思路 首先很容易想到DP. 设\(dp_{x,i}\)表示\(x\)子树全部被覆盖,而且向上恰好延伸到\(dep=i\)的位置, ...
- LOJ2537 PKUWC2018 Minimax 树形DP、线段树合并
传送门 题意:自己去看 首先可以知道,每一个点都有几率被选到,所以$i$与$V_i$的关系是确定了的. 所以我们只需要考虑每一个值的取到的概率. 很容易设计出一个$DP$:设$f_{i,j}$为在第$ ...
- 洛谷P3928 Sequence2(dp,线段树)
题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树
http://codeforces.com/contest/462 A:Appleman and Easy Task 要求是否全部的字符都挨着偶数个'o' #include <cstdio> ...
- 2017西安区域赛A / UVALive - 8512 线段树维护线性基合并
题意:给定\(a[1...n]\),\(Q\)次询问求\(A[L...R]\)的异或组合再或上\(K\)的最大值 本题是2017的西安区域赛A题,了解线性基之后你会发现这根本就是套路题.. 只要用线段 ...
随机推荐
- Spring MVC常用的注解
@Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指定,如下 方法一: @Controller ...
- 我的PHP之旅--SQL语句
SQL语句 结构化查询语言(Structured Query Language)简称SQL,是一种操作数据的语言. 增加记录 INSERT INTO table_name(字段1, 字段2, 字段3) ...
- SQL2008附加数据库提示错误:5120
前几天在附加数据库时,出现了这个错误 在win7 x64系统上使用sql2008进行附加数据库(包括在x86系统正在使用的数据库文件,直接拷贝附加在X64系统中)时,提示无法打开文 ...
- SQL中not and or优先级问题
SQL中 not and or优先级问题 刚刚在项目中遇到这样一个问题,SQL语句如下: 我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1 2.STATUS=3 但是结果 ...
- HttpOnly
Contents 1 Overview 1.1 Who developed HttpOnly? When? 1.2 What is HttpOnly? 1.3 Mitigating the Most ...
- DRUID连接池的简单使用
DRUID——为监控而生的DB池 1. DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监 ...
- 使用Code first 进行更新数据库结构(数据迁移)
CodeFirst 背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会 ...
- 令人头疼的clientTop、scrollTop、offsetTop
1.网络上流传的图片 2.稍微容易理解点的示意图 参考链接:http://blog.csdn.net/lidiansheng/article/details/7950751 3.言简意赅的示意图 4. ...
- 近期会放出tlplayer for android的更新版本
tlplayer for android的一次重大更新在近期将会放出,自从去年初的时候放出tlplayer android版本后,一直都没有更新tlplayer,而tlplayer for windo ...
- Oracle中的阻塞锁SQL(阻塞在哪个数据上)
SELECT ( '节点 ' || a.inst_id || ' session ' || a.sid || ...