Solved:3

Rank:105

治哥出题了 我感动哭了

A Graph Game (分块)

题意:1e5个点 2e5条边 s(x)表示与x点直接相邻的点集合

   有两种操作 1种将按输入顺序的边第l条到第r条边翻转 连接->切断 切断->链接

   还有一种询问 s(x)与s(y)是否相等

题解:题解说 可以给每个点随机一个值 然后s(x)可以用与x直接相邻的点xor起来 (还有这种操作???

   然后我们把边分块 翻转操作就是xor操作 每个点之间边的状态是一样的 所以可以共用

   而且对一条边的修改 影响的只有两个点的信息 所以对块两边的边暴力修改他所影响的点

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5; int n, m, blo;
int bl[MAXN << 1];
int sum[MAXN][505];
int now[MAXN];
int val[MAXN];
int u[MAXN << 1];
int v[MAXN << 1];
int vis[505]; void update(int l, int r) {
for(int i = l; i <= min(r, bl[l] * blo); i++) {
now[u[i]] ^= val[v[i]];
now[v[i]] ^= val[u[i]];
} if(bl[l] != bl[r]) {
for(int i = (bl[r] - 1) * blo + 1; i <= r; i++) {
now[u[i]] ^= val[v[i]];
now[v[i]] ^= val[u[i]];
}
}
for(int i = bl[l] + 1; i < bl[r]; i++) vis[i] ^= 1;
} int main() {
srand(time(NULL));
for(int i = 1; i <= 100000; i++) val[i] = rand() + 1; int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
blo = sqrt(m);
for(int i = 1; i <= m; i++) bl[i] = (i - 1) / blo + 1;
for(int i = 1; i <= n; i++) now[i] = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= bl[m]; j++) sum[i][j] = 0;
for(int i = 1; i <= bl[m]; i++) vis[i] = 1; for(int i = 1; i <= m; i++) {
scanf("%d%d", &u[i], &v[i]);
sum[u[i]][bl[i]] ^= val[v[i]];
sum[v[i]][bl[i]] ^= val[u[i]];
} int qu; scanf("%d", &qu);
while(qu--) {
int opt, x, y;
scanf("%d%d%d", &opt, &x, &y);
if(opt == 1) update(x, y);
else if(opt == 2) {
int ans1 = now[x], ans2 = now[y];
for(int i = 1; i <= bl[m]; i++) {
if(vis[i]) {
ans1 ^= sum[x][i];
ans2 ^= sum[y][i];
}
}
if(ans1 == ans2) printf("1");
else printf("0");
}
}
puts("");
}
return 0;
}

A Graph Game

F Planting Trees

题意:500x500的矩阵 求一个最大的子矩阵 使得区间最大减最小<=M

题解:枚举纵坐标的区间 对于每一个区间 从第一行开始 单调尺取搞一搞

#include <bits/stdc++.h>
using namespace std; int a[505][505];
int zd[505];
int zx[505]; int qd[505];
int qx[505]; int main() {
int T;
scanf("%d", &T);
while(T--) {
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
} int ans = 1;
for(int j = 1; j <= n; j++) {
for(int k = 1; k <= n; k++) {
zx[k] = 1e5 + 5;
zd[k] = 0;
}
for(int k = j; k <= n; k++) {
for(int i = 1; i <= n; i++) {
zd[i] = max(zd[i], a[i][k]);
zx[i] = min(zx[i], a[i][k]);
} int lx = 1, rx = 0;
int ld = 1, rd = 0; int nowl = 1;
for(int i = 1; i <= n; i++) {
while(lx <= rx && zx[qx[rx]] >= zx[i]) rx--;
qx[++rx] = i;
while(ld <= rd && zd[qd[rd]] <= zd[i]) rd--;
qd[++rd] = i; while(nowl <= i && zd[qd[ld]] - zx[qx[lx]] > m) {
nowl++;
while(lx <= rx && qx[lx] < nowl) lx++;
while(ld <= rd && qd[ld] < nowl) ld++;
}
if(nowl <= i && zd[qd[ld]] - zx[qx[lx]] <= m) {
ans = max(ans, (k - j + 1) * (i - nowl + 1));
}
}
}
}
printf("%d\n", ans);
}
return 0;
}

F Planting Trees

G Removing Stones

题意:n堆石子 每次可以选择两堆不同的各拿走一个 如果能拿完 就表示获胜

   如果石子的和为奇数 则将最少的一堆石子数-1

   问有多少对区间 能获胜

题解:显然 题目等于 计算 区间max * 2 <= 区间和的个数

   考虑反问题 计算max * 2 > 区间和

   然后直接暴力枚举每个点作为最大值 往前搞搞 往后搞搞

   巧妙的是这样的时间复杂度其实并不高 要让这样暴力枚举的时间复杂度退化到n方的数据 显然是ai >= ai+1  * 2
   举个例子长度为5的数组 16 8 4 2 1 能让暴力枚举的复杂度退化到n方 但是ai < 1e9

   均摊一下每个数的平均枚举到log

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[300005];
ll pre[300005]; int main() {
int T;
scanf("%d", &T);
while(T--) {
ll n;
scanf("%lld", &n);
for(int i = 1; i <= n; i++) scanf("%lld", &a[i]); ll ans = 0;
for(int i = 1; i <= n; i++) {
int cnt = 0;
pre[0] = 0;
for(int j = i + 1; j <= n; j++) {
pre[++cnt] = a[j];
pre[cnt] += pre[cnt - 1];
if(pre[cnt] >= a[i]) {
cnt--;
break;
}
} ans += cnt;
ll sum = 0;
for(int j = i - 1; j >= 1; j--) {
sum += a[j];
if(sum >= a[i]) break; ans++;
int l = 0, r = cnt;
int mid = l + r >> 1;
while(l + 1 < r) {
mid = l + r >> 1;
if(sum + pre[mid] < a[i]) l = mid;
else r = mid;
}
if(sum + pre[r] < a[i]) ans += r;
else ans += l;
}
} ans = n * (n - 1) / 2 - ans;
printf("%lld\n", ans);
} return 0;
}

G Removing Stones

2019牛客多校 Round3的更多相关文章

  1. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  2. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  3. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  4. 2019牛客多校 Round4

    Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...

  5. 2019牛客多校第一场E ABBA(DP)题解

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...

  6. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  7. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  8. [2019牛客多校第二场][G. Polygons]

    题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保 ...

  9. 2019 牛客多校第一场 D Parity of Tuples

    题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文 ...

随机推荐

  1. 非root用户安装centos的jdk

    1. 下载linux的jdk到自定义目录(以下简称安装目录),解压. 2. 在安装目录下新建文件局部环境变量文件:bash_profile 内容为:(注意修改JAVA_HOME目录) export J ...

  2. (二)数据源处理2-xlrd操作excel

    import xlrd3workbook = xlrd3.open_workbook('test_data.xlsx')sheet =workbook.sheet_by_name('Sheet1')p ...

  3. Java 在pom.xml中配置build resources, 来防止我们资源导出失败问题(Maven项目)

    在pom.xml中配置build, 来防止我们资源导出失败问题 <!--在build中配置resources, 来防止我们资源导出失败问题--> <build> <res ...

  4. Python pip install 默认路径修改。

    pip动不动就下载数百M的文件.这些文件默认在C:盘,那么为了节省空间需要修改这些路径: 打开cmd命令窗口.输入: python -m site C:\Users\hewei>python - ...

  5. ctfhub技能树—web前置技能—http协议—302跳转

    开启靶机 打开环境,查看显示 点击Give me Flag后发生跳转 根据题目提示为HTTP临时重定向 简单记录一下HTTP临时重定向是什么 HTTP重定向:服务器无法处理浏览器发送过来的请求(req ...

  6. K8s遇到问题解决思路

    问题排查一 从describe去查找相应的deploy/pod/rs/svc [root@k8s-master ~]# kubectl describe po/nginx-f95d765f9-8b6b ...

  7. eCATT使用前的配置

    如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...

  8. QT串口助手(二):参数配置

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 主要实现功能 串口参数的配置:波特率.数据位.停止位.校验位 本机串口设备的查询与添加显示 串口设备的手动更新与打 ...

  9. vue-cli3x4x修改本地端口port

    一.推荐方法 "scripts": { "serve": "vue-cli-service serve --port 3000", &quo ...

  10. DSL是什么?Elasticsearch的Query DSL又是什么?

    1.DSL简介 DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言.而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证(备注:G ...