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. 06C语言运算符

    C语言运算符 算术运算符 运算符 描述 + 把两个操作数相加 - 从第一个操作数中减去第二个操作数 * 把两个操作数相乘 / 分子除以分母 % 取模运算符,整除后的余数 ++ 自增运算符,整数值增加 ...

  2. cookie domain path 跨域

    1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net.而跨域访问,如域A为t1 ...

  3. CCF201604-1 折点计数 java(100分)

    试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天 ...

  4. LINUX-系统信息

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  5. JavaScript 面向对象的编程(一)

    面向对象的JS var CheckObject = function(){ this.checkName = function(){ console.log('checkName'); } this. ...

  6. 实验1“C语言开发环境使用和数据类型、运算符、表达式”总结与体会

    一.实验结论 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数,判断其是奇数还是偶数 #include <stdio.h> int main() { int x; prin ...

  7. git命令大杂烩

    查看版本库中的文件: git ls-files添加到暂存区: git add filesName|\folderName(循环递归) git add .(添加当前目录下的所有文件包括子目录,如果添加文 ...

  8. java操作数据库的工具库(from韩顺平)

    需要引入jar包sqljdbc4.jar 其他关系型数据库只需要改动前面的连接过程,其他的一样 package com.cx.util; import java.io.FileInputStream; ...

  9. IDEA中用jetty启动项目时,url 404

    问题背景:IDE:IDEA 语言:java 服务器:jetty 框架:nutz 问题描述: 按照nutz构建j2ee项目,配置projectStructor中的依赖,jre,jetty之后,部署,并通 ...

  10. 最小生成树 D - Constructing Roads

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...