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. Colletions工具类常用方法

    Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合 排序操作 void reverse(List list)/ ...

  2. 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  3. java中通用权限管理设计(转)

    原文地址:http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html 转自博客园暗夜精灵-鬼才阁 实现业务系统中的用户权限管理 B/ ...

  4. 一篇入门MongoDB

    目录 1.MongoDB 基本介绍 2.MongoDB 基本概念 3.数据库操作 4.集合操作 5.文档操作 6.查询条件 7.索引 1.MongoDB 基本介绍 (1)安装 MongoDB 简单来说 ...

  5. kata练习题

    This time no story, no theory. The examples below show you how to write function accum: Examples: ac ...

  6. DS26C31M和DS26C32AM

    DS26C31M是产生差分信号的芯片,实际使用的时候,测得在5V供电的情况下,输出+和输出-的压差是5V其中输出+和输入的特性相同. DS26C32AM是接收差分信号的芯片,与DS26C31M可以向配 ...

  7. 升级 HTTPS,价值何在?

    HTTPS 实质上是一种面向安全信息通信的协议.从最终的数据解析的角度上看,HTTPS 与 HTTP 没有本质上的区别.对于接收端而言,SSL/TSL 将接收的数据包解密,将数据传给 HTTP 协议层 ...

  8. 【11】AngularJS HTML DOM

    AngularJS HTML DOM AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令. ng-disabled 指令 ng-disabled 指令直接绑定应用程序数据到 ...

  9. HDU 5291 Candy Distribution

    Candy Distribution Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  10. [luoguP3565] [POI2014]HOT-Hotels(dfs)

    传送门 三点在树上距离相等的情况只有一种,就是以某一个点为中心,三个点到这个点的距离相等. 所以直接枚举每个点作为中心,dfs这个中心的子树,根据乘法原理统计答案即可. 时间复杂度 O(n2) (n ...