A:暴力模拟

#include<bits/stdc++.h>
using namespace std;
int a, b;
int main()
{
scanf("%d%d", &a, &b);
int delta = , x = ;
while()
{
if(x == )
{
if(a < delta)
{
puts("Vladik");
return ;
}
a -= delta; ++delta;
x ^= ;
}
else
{
if(b < delta)
{
puts("Valera");
return ;
}
b -= delta; ++delta;
x ^= ;
}
}
return ;
}

B:先写了个sort竟然pp了,过了十分钟感觉不太好,又写了个基数排序

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n, m;
int p[N], a[N], b[N];
bool cp(int i, int j) { return i < j; }
int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i) scanf("%d", &p[i]);
while(m--)
{
int l, r, x, temp; scanf("%d%d%d", &l, &r, &x);
for(int i = l; i <= r; ++i) a[i] = p[i], b[p[i]] = ;
temp = p[x];
int pos1 = l, pos2 = ;
while(pos1 <= r)
{
while(!b[pos2]) ++pos2; b[pos2] = ;
a[pos1] = pos2; ++pos1;
}
if(a[x] == temp) puts("Yes"); else puts("No");
}
return ;
}

C:dp什么的滚吧。。。dp[i]表示到i的最大值,那么我们枚举i-1每个数选不选,转移一下即可

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n;
int a[N], l[N], r[N], f[N], vis[N];
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i)
{
scanf("%d", &a[i]);
r[a[i]] = i;
if(!l[a[i]]) l[a[i]] = i;
}
for(int i = ; i <= n; ++i)
{
f[i] = max(f[i], f[i - ]); int cur = ;
memset(vis, , sizeof(vis));
int last = << ;
for(int j = i; j >= ; --j)
{
if(last == j) f[i] = max(f[i], f[j] + cur);
if(r[a[j]] > i) break;
if(!vis[a[j]])
{
cur ^= a[j];
vis[a[j]] = ;
last = min(last, l[a[j]] - );
}
}
}
printf("%d\n", f[n]);
return ;
}

D:没看懂题目

E:很不错的一道题 我们用线段树维护每一层的值和并查集 然后查询的时候把并查集复原合并 太巧妙了 这个并查集复原想了很长时间 思路是这个样子的:因为对于两块东西 原来是不相连的

但是build完和query完并查集都会变 那么我们在build的时候用并查集维护每个节点的连通性 保存两侧的当前并查集中的根是谁。 查询的时候把根的fa赋成自己 因为这个fa代表了原来的连通块

然后之后的节点合并改变了根 那么我们想要回到原来的状态把根赋成单独的一块就行了 然后要注意更新ret要在外面更新 因为可能下面和上面会连接 否则并查集不能及时地更新

#include<bits/stdc++.h>
using namespace std;
#define id(i, j) (i - 1) * m + j
const int N = ;
struct data {
int sum, l[], r[], L, R;
} tree[N];
int n, m, q;
int fa[N], a[][N];
int find(int x)
{
return fa[x] == x ? x : fa[x] = find(fa[x]);//fa[x] = find(fa[x]);
}
void connect(int x, int y)
{
int a = find(x), b = find(y);
if(a == b) return;
fa[a] = b;
}
data merge(data x, data y, int mid)
{
if(!x.sum) return y;
if(!y.sum) return x;
data ret;
ret.sum = x.sum + y.sum;
for(int i = ; i <= n; ++i)
{
fa[x.l[i]] = x.l[i];
fa[x.r[i]] = x.r[i];
fa[y.l[i]] = y.l[i];
fa[y.r[i]] = y.r[i];
}
for(int i = ; i <= n; ++i)
if(a[i][mid] == a[i][mid + ])
{
if(find(x.r[i]) != find(y.l[i])) connect(x.r[i], y.l[i]), --ret.sum;
}
for(int i = ; i <= n; ++i)
{
ret.l[i] = find(x.l[i]);
ret.r[i] = find(y.r[i]);
}
ret.L = x.L; ret.R = y.R;
return ret;
}
void build(int l, int r, int x)
{
if(l == r)
{
for(int i = ; i <= n; ++i)
if(a[i][l] == a[i - ][l])
{
fa[id(i, l)] = tree[x].l[i] = tree[x].r[i] = tree[x].l[i - ];
}
else fa[id(i, l)] = tree[x].l[i] = tree[x].r[i] = id(i, l), ++tree[x].sum;
tree[x].L = l; tree[x].R = r;
return;
}
int mid = (l + r) >> ;
build(l, mid, x << ); build(mid + , r, x << | );
tree[x] = merge(tree[x << ], tree[x << | ], mid);
}
data query(int l, int r, int x, int a, int b)
{
if(l > b || r < a) return tree[];
if(l >= a && r <= b)
{
for(int i = ; i <= n; ++i)
fa[id(i, l)] = tree[x].l[i], fa[id(i, r)] = tree[x].r[i];
return tree[x];
}
int mid = (l + r) >> ;
data L = query(l, mid, x << , a, b);
data R = query(mid + , r, x << | , a, b);
return merge(L, R, mid);
}
int main()
{
scanf("%d%d%d", &n, &m, &q);
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) scanf("%d", &a[i][j]);
build(, m, );
while(q--)
{
int l, r; scanf("%d%d", &l, &r);
printf("%d\n", query(, m, , l, r).sum);
}
return ;
}

codeforces round #416 div2的更多相关文章

  1. codeforces round 416 div2 补题 CF 811 A B C D E

    A. Vladik and Courtesy 水题略过 #include<cstdio> #include<cstdlib> #include<cmath> usi ...

  2. Codeforces Round #539 div2

    Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...

  3. 【前行】◇第3站◇ Codeforces Round #512 Div2

    [第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...

  4. Codeforces Round#320 Div2 解题报告

    Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...

  5. Codeforces Round #564(div2)

    Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...

  6. Codeforces Round #361 div2

    ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...

  7. Codeforces Round #626 Div2 D,E

    比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...

  8. CodeForces Round 192 Div2

    This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...

  9. Codeforces Round #359 div2

    Problem_A(CodeForces 686A): 题意: \[ 有n个输入, +\space d_i代表冰淇淋数目增加d_i个, -\space d_i表示某个孩纸需要d_i个, 如果你现在手里 ...

随机推荐

  1. CentOS 7中firewall防火墙详解和配置以及切换为iptables防火墙--转载

    最近在linux(这里用到的是Centos7的64位版本)安装nginx时,在开放80端口时用iptables设置端口 和重启服务发现提示未找到文件,在网络上收集查找后发现在Centos7中iptab ...

  2. block教程

    http://pernghh.pixnet.net/blog/trackback/eac87d412e/33563409 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化 ...

  3. 「 Luogu P1231 」 教辅的组成

    题目大意 有 $\text{N1}$ 本书 $\text{N2}$本练习册 $\text{N3}$本答案,一本书只能和一本练习册和一本答案配对.给你一些书和练习册,书和答案的可能的配对关系.问你最多可 ...

  4. UVA - 1620 Lazy Susan(逆序数)

    题目: 把1~n(n≤500)放到一个圆盘里,每个数恰好出现一次.每次可以选4个连续的数字翻转顺序.问能不能变成1.2.3....n的顺序. 思路: 这样的题的规律真的是一点都不好推,看了网上的博客知 ...

  5. UVA-12333 Revenge of Fibonacci(竖式加法模拟 & 字典树)

    题目: 给出一个斐波那契数字的前缀,问第一个有这个前缀的数字在斐波那契数列中是第几个. 思路: 紫书提示:本题有一定效率要求.如果高精度代码比较慢,可能会超时. 利用滚动数组和竖式加法来模拟斐波那契相 ...

  6. MFC 多行文本显示心得

    最近在利用MFC做端口扫描器实验,其中涉及CString.char.int等之间的转换.文本框的多行显示问题.总是显示底层最新结果等问题,下面写一些我总结的相关方法. 一.CString 转  cha ...

  7. 关于一个css布局的小记录

    这里我们采用一种最简单的 方式,至少我目前认为最简单的方式,使用flex布局来实现 下面是html结构: <div class="box1"> <div clas ...

  8. docker CE 的安装

    一.Docker CE的安装1.先决条件运行环境:Ubuntu 64位或者其他支持Docker的64位系统运行配置,linux内核版本必须大于 3.10,否则会因为缺少容器运行所需的功能而出错. 2. ...

  9. hrbust oj 1536 Leonardo's Notebook 置换群问题

    题目大意: 给出一个A~Z的置换G,问能否找到一个A~Z的置换G' 能够用来表示为 G = G'*G' 由定理: 任意一个长为 L 的置换的k次幂,都会把自己的每一个循环节分裂成gcd(L, K)份, ...

  10. 撸呀撸的左手(KMP+DP)

    题目描述 撸呀撸很迷茫,因为他的左手总是不受控制,做一些不雅的事情.于是撸呀撸一狠心,决定戒撸.没想到,他的左手受不了寂寞,一闲下来就在键盘上各种乱敲. 唔,神奇的左手表示,safasfasaafaf ...