A

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
int num[];
int pre[];
int n;
int number;
bool check()
{
for (int i = ; i <= n; i++)
{
pre[i] = pre[i - ] + pre[i];
if (pre[i] < )
{
return false;
}
}
return true;
}
int main()
{
int T;
cin >> T;
while (T--)
{
cin >> n >> number;
for (int i = ; i <= number; i++)
{
cin >> num[i];
}
for (int i = ; i <= ; i++)
{
for (int j = ; j <= n; j++)
{
pre[j] = ;
}
for (int j = ; j <= number; j++)
{
if (i == )
{
pre[num[j]] += ;
pre[num[j] + ] += -;
}
else
{
pre[max(, num[j] - i + )] += ;
pre[num[j] + i] += -;
}
}
if (check())
{
cout << i << endl;
break;
}
}
}
return ;
}

B

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-8;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int maxm = ;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll mod = 3e7;
int le[];
int re[];
int wait[];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
scanf("%d", &n);
for (int i = ; i < n; i++)
{
scanf("%d %d", &le[i], &re[i]);
}
int cur = le[];
for (int i = ; i < n; i++)
{
cur = max(cur, le[i]);
if (re[i] >= cur)
{
wait[i] = cur;
cur++;
}
else
{
wait[i] = ;
}
}
for (int i = ; i < n; i++)
{
cout << wait[i];
if (i != n - )
{
cout << " ";
}
}
cout << endl;
}
return ;
}

C

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
int num[];
int pre[];
char f[];
int main()
{
int n;
cin >> n;
for (int i = ; i <= n; i++)
{
scanf("%d", num + i);
}
scanf("%s", f + );
for (int i = ; i < n; i++)
{
if (f[i] == '')
{
pre[i] = pre[i - ] + ;
}
else
{
pre[i] = ;
}
}
for (int i = ; i < n; i++)
{
if (pre[i] > pre[i + ])
{
sort(num + i - pre[i] + , num + i + );
}
}
for (int i = ; i < n; i++)
{
if (num[i] != i)
{
cout << "NO" << endl;
return ;
}
}
cout << "YES" << endl;
return ;
}

E

把所有点放在一个set里,每次取set中一个顶点,删去,遍历set,删去与此顶点邻接的顶点

因为遍历的过程中有两种结局1.删去某个结点 遍历成功 2.两点之间不存在边 遍历失败

所以遍历的总复杂度为O(n+m) 再加上set的复杂度就是 O((n+m)log)

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
set<int> need;
map<int, bool> mp[];
vector<int> ans;
int main()
{
int n, m;
int from, to;
cin >> n;
for (int i = ; i <= n; i++)
{
need.insert(i);
}
cin >> m;
for (int i = ; i <= m; i++)
{
scanf("%d %d", &from, &to);
mp[from][to] = mp[to][from] = ;
}
while (!need.empty())
{
int todo = *need.begin();
need.erase(todo);
queue<int> que;
ans.push_back();
que.push(todo);
while (!que.empty())
{
queue<int> shan;
int cnt = que.front();
que.pop();
ans.back()++;
for (auto i : need)
{
if (!mp[cnt][i])
{
que.push(i);
shan.push(i);
}
}
while (!shan.empty())
{
need.erase(shan.front());
shan.pop();
}
}
}
cout << ans.size() << endl;
sort(ans.begin(), ans.end());
for (auto i : ans)
{
cout << i << " ";
}
cout << endl;
return ;
}

F

如果知道到N的因数(N%i==0)数量级是N^(1/3)的这道题就很好做了 因为当N=1或者N=2时因数数目等于N 而1e6=2^20 每个数最多被修改7次

所以线段树维护一个最大值 一个sum值 当最大值不大于2时不用修改 大于二时递归下去暴力修改

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
ll n, q;
int l, r;
ll dp[];
struct node
{
ll maxn, sum;
} tree[];
void pushup(int x)
{
tree[x].sum = tree[x << ].sum + tree[x << | ].sum;
tree[x].maxn = max(tree[x << ].maxn, tree[x << | ].maxn);
}
void build(int x, ll value, int root = , int l = , int r = n)
{
if (l > x || r < x)
{
return ;
}
if (l == x && r == x)
{
tree[root].sum = tree[root].maxn = value;
return;
}
int mid = (l + r) >> ;
if (x <= mid)
{
build(x, value, root << , l, mid);
}
else
{
build(x, value, root << | , mid + , r);
}
pushup(root);
}
void update(int xl, int xr, int root = , int l = , int r = n)
{
if (l > r || l > xr || r < xl)
{
return;
}
if (xl <= l && xr >= r && tree[root].maxn <= )
{
return;
}
if (l == r)
{
tree[root].sum = tree[root].maxn = dp[tree[root].sum];
return ;
}
int mid = (l + r) >> ;
if (xl <= mid)
{
update(xl, xr, root << , l, mid);
}
if (xr > mid)
{
update(xl, xr, root << | , mid + , r);
}
pushup(root);
}
ll getsum(int xl, int xr, int root = , int l = , int r = n)
{
if (l > r || l > xr || r < xl)
{
return ;
}
if (xl <= l && xr >= r)
{
return tree[root].sum;
}
int mid = (l + r) >> ;
return getsum(xl, xr, root << , l, mid) + getsum(xl, xr, root << | , mid + , r);
}
int main()
{
cin >> n >> q;
ll cnt;
for (int i = ; i <= ; i++)
{
for (int j = i; j <= ; j += i)
{
dp[j]++;
}
}
for (int i = ; i <= n; i++)
{
scanf("%lld", &cnt);
build(i, cnt);
}
for (int i = ; i <= q; i++)
{
int now;
ll value;
int aim;
cin >> now;
if (now == )
{
scanf("%d %d", &l, &r);
update(l, r);
}
else
{
scanf("%d %d", &l, &r);
cout << getsum(l, r) << endl;
}
}
return ;
}

Codeforces 920 反图联通块 线段树质因数暴力的更多相关文章

  1. Codeforces 920 E Connected Components?

    Discription You are given an undirected graph consisting of n vertices and  edges. Instead of giving ...

  2. Educational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)

    题目链接:http://codeforces.com/contest/616/problem/C 题意就是 给你一个n行m列的图,让你求’*‘这个元素上下左右相连的连续的’.‘有多少(本身也算一个), ...

  3. Codeforces 731C. Socks 联通块

    C. Socks time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input o ...

  4. Codeforces Round #369 (Div. 2) D. Directed Roads dfs求某个联通块的在环上的点的数量

    D. Directed Roads   ZS the Coder and Chris the Baboon has explored Udayland for quite some time. The ...

  5. PAT A1013 Battle Over Cities (25 分)——图遍历,联通块个数

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  6. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) E. Bear and Forgotten Tree 2 bfs set 反图的生成树

    E. Bear and Forgotten Tree 2 题目连接: http://www.codeforces.com/contest/653/problem/E Description A tre ...

  7. 【UVA10765】Doves and bombs (BCC求割点后联通块数量)

    题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...

  8. 链表加bfs求补图联通块

    https://oj.neu.edu.cn/problem/1387 给一个点数N <= 100000, 边 <= 1000000的无向图,求补图的联通块数,以及每个块包含的点数 由于点数 ...

  9. bzoj2200拓扑排序+最短路+联通块

    自己写的不知道哪里wa了,明明和网上的代码差不多.,. /* 给定一张图,有的边是无向边,有的是有向边,有向边不会出现在环中,且有可能是负权值 现在给定起点s,求出s到其余所有点的最短路长度 任何存在 ...

随机推荐

  1. 八、RF的内置变量

    1.表示“空”的变量 ${EMPTY} 空 适用输入空的案例 2.表示“空格”的变量 ${SPACE} 空格,如果是需要5个空格可以这样写${SPACE*5} 3.目录的绝对路径 ${CURDIR} ...

  2. day66—angularJS学习笔记-表达式

    转行学开发,代码100天——2018-05-21 angular的变量数据初始化: ng-init="quantity=1;cost=30;student={firstName:'李',la ...

  3. Jest 里面需要注意的几个小细节

    概述 最近学 jest ,有一些细节记录下来,供以后开发时参考,相信对其他人也有用. import 提升 ES6 的 import 会自动提升到文档前面,所以下面的 import 会提升到前面. le ...

  4. Selenium学习之==>三种等待方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  5. oracle 迁移数据文件

    步骤: 1.SQL>SELECT FILE_NAME FROM DBA_DATA_FILES; FILE_NAME --------------------------------------- ...

  6. Jmeter 接口测试 响应结果中文是Unicode转为中文

    1.增加一个后置处理器:BeanShell PostProcessor 内容如下: //获取响应代码Unicode编码的        String s2=new String(prev.getRes ...

  7. 【ABAP系列】SAP ABAP DOI展示EXCEL或WORD

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP DOI展示EX ...

  8. 深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)

    学习Java GC机制,可以帮助我们在日常工作中 排查各种内存溢出或泄露问题,解决性能瓶颈,达到更高的并发量,写出更高效的程序. 我们将从4个方面学习Java GC机制, 1,内存是如何分配的: 2, ...

  9. python 并发编程 多进程 队列

    队列介绍 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的 创建队列的类(底层就是以管道和锁定的方式实现) 制 ...

  10. nodejs 对接微信 express 对接微信

    安装引用 npm install express npm install body-parser npm install express-xml-bodyparser npm install axio ...