CF上的3道小题(2)

T1:CF630K Indivisibility

题意:给出一个数n,求1到n的数中不能被2到9中任意一个数整除的数。

分析:容斥一下,没了。

代码:

#include <cstdio>
#include <string.h>
#include <algorithm>
#include <cstdlib>
using namespace std;
typedef long long ll;
ll n;
ll solve() {
return n-n/2-n/3-n/5-n/7+n/6+n/10+n/14+n/15+n/21+n/35-n/30-n/42-n/70-n/105+n/210;
}
int main() {
freopen("ah.in","r",stdin);
freopen("ah.out","w",stdout);
scanf("%lld",&n);
printf("%lld\n",solve());
}

T2:CF690C3. Brain Network (hard)

题意:每次加一个点,求这棵树的直径。

分析:直径的两个端点最多替换下去一个,于是分别求一下新点到两个端点的距离更新答案即可。

距离倍增一下。

代码:

#include <cstdio>
#include <string.h>
#include <algorithm>
#include <cstdlib>
using namespace std;
inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
int rd() {
int x=0; char c=nc();
while(c<'0'||c>'9') c=nc();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=nc();
return x;
}
#define N 200050
int n,ans,f[22][N],g[N],h[N],p1,p2,dep[N];
int lca(int x,int y) {
int i;
if(dep[x]<dep[y]) swap(x,y);
for(i=21;i>=0;i--) {
if(dep[f[i][x]]>=dep[y]) x=f[i][x];
}
if(x==y) return x;
for(i=21;i>=0;i--) {
if(f[i][x]!=f[i][y]) {
x=f[i][x]; y=f[i][y];
}
}
return f[0][x];
}
int main() {
// freopen("name.in","r",stdin);
// freopen("name.out","w",stdout);
n=rd();
int i,x,j;
dep[1]=1;
p1=p2=1;
int flg=0;
for(i=2;i<=n;i++) {
x=rd();
f[0][i]=x;
dep[i]=dep[x]+1;
for(j=1;j<=21;j++) {
f[j][i]=f[j-1][f[j-1][i]];
}
int l=lca(p1,i);
if(dep[i]+dep[p1]-dep[l]-dep[l]>ans) {
ans=dep[i]+dep[p1]-dep[l]-dep[l]; p2=i;
}
l=lca(p2,i);
if(dep[i]+dep[p2]-dep[l]-dep[l]>ans) {
ans=dep[i]+dep[p2]-dep[l]-dep[l]; p1=i;
}
if(!flg) flg=printf("%d",ans);
else printf(" %d",ans);
}
}

T3:CF685D Kay and Eternity

题意:网格平面上有n个格子被涂黑,第i个黑色格子的坐标为(xi,yi)。对于在区间[1,n]中的每一个整数x,求恰好包含x个黑色格子的k*k的矩形个数。数据保证所有n个格子不相同。

分析:借鉴了一下题解的代码。

每个点对应一个k*k的正方形(不妨设其为右下角)。把xi到xi+K-1这段点离散。

然后对于每个y拆成y-K+1和y两个点,一个表示1一个表示-1。扫描线从下往上扫。

每次求出sum[i]表示这个点以下覆盖了多少黑点,lst[i]表示上一次扫的y。

对每个sum[i]的答案+=y-lst[i]。

实际上离散2n个点就可以,空间还小。

我这里nk的空间不能直接开数组。

代码:

#include <cstdio>
#include <string.h>
#include <algorithm>
#include <cstdlib>
#include <vector>
using namespace std;
#define N 100001
typedef long long ll;
struct Point {
int x,y;
bool operator < (const Point &p) const {
return x<p.x;
}
}a[N];
struct Q {
int l,r,y,type,rl,rr;
bool operator < (const Q &x) const {
return y<x.y;
}
}q[N<<1];
vector<int>tt;
int K,n;
ll ans[N];
int main() {
scanf("%d%d",&n,&K);
int i,cnt=0,j,tot=0;
for(i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1);
for(i=1;i<=n;i++) {
int st=(!tt.empty())?max(tt.back()+1,a[i].x-K+1):a[i].x-K+1;
for(j=st;j<=a[i].x;j++) tt.push_back(j);
}
for(i=1;i<=n;i++) {
q[++tot].rl=a[i].x-K+1; q[tot].rr=a[i].x; q[tot].y=a[i].y-K+1; q[tot].type=1;
q[++tot].rl=a[i].x-K+1; q[tot].rr=a[i].x; q[tot].y=a[i].y+1; q[tot].type=-1;
}
for(i=1;i<=tot;i++) {
q[i].l=lower_bound(tt.begin(),tt.end(),q[i].rl)-tt.begin();
q[i].r=upper_bound(tt.begin(),tt.end(),q[i].rr)-tt.begin();
}
cnt=tt.size();
tt.clear();
tt.shrink_to_fit();
sort(q+1,q+tot+1);
vector<int>sum(cnt,0);
vector<int>lst(cnt,0x3f3f3f3f);
for(i=1;i<=tot;i++) {
int l=q[i].l,r=q[i].r;
for(j=l;j<r;j++) {
if(lst[j]!=0x3f3f3f3f) {
ans[sum[j]]+=q[i].y-lst[j];
}
sum[j]+=q[i].type;
lst[j]=q[i].y;
}
}
for(i=1;i<=n;i++) printf("%lld ",ans[i]);
}

CF上的3道小题(2)的更多相关文章

  1. CF上的3道小题(1)

    CF上的3道小题 终于调完了啊.... T1:CF702E Analysis of Pathes in Functional Graph 题意:你获得了一个n个点有向图,每个点只有一条出边.第i个点的 ...

  2. 关于SQL的几道小题详解

    关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...

  3. 逛园子,看到个练习题,小试了一把(淘宝ued的两道小题)

    闲来无事,逛园子,充充电.发现了一个挺有意思的博文,自己玩了一把. 第一题:使用 HTML+CSS 实现如图布局,border-widht 1px,一个格子大小是 60*60,hover时候边框变为橘 ...

  4. 【cpp上】课后正误小题

    State whether each of the following is true or false. If false, explain why. Assume the state ment u ...

  5. 清橙A1206.小Z的袜子 && CF 86D(莫队两题)

    清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问 ...

  6. 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。

    Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...

  7. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  8. 常让人误解的一道js小题

    一道小题引发的深思 今天无意中看到一个js笔试题,不由得想起初学js那会被各种题目狂虐的心酸,虽说现在也会被笔试题所虐,但毕竟比之前好了很多,下面就是我的个人理解,欢迎拍砖.指正: var x = 1 ...

  9. [2]十道算法题【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

随机推荐

  1. 洛谷P1504 积木城堡

    题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木 ...

  2. Vim pre-work

    1.先学会touch typing盲打是一切的基础 重点在于手眼协调 如果实现不了盲打.一切高效率的Vim操作都将无从做起 2.vim的使用 2.1.hjkl的移动 推荐练习贪吃蛇  和3D平衡球   ...

  3. JS变量写到HTML页面中并修改变量值(前台处理数据序号问题)

    有时候我们在前台需要对序号进行处理,我们需要将JS变量写到页面中进行显示. 第一种方式:后台处理 第二种方式:JS中定义全局变量,然后进行显示,可以书写一个JS函数对不同的需要进行不同的替换,也就可以 ...

  4. poj 1236+hdu2767 有向图 缩点+看度数(tarjan)

    1236题意:一个有向图,1,求至少从几个点出发可以遍历该图,2:,求至少添加多少边,使强连通.而,HDU的只有后面一问. 解;先缩点,第一问只需找所有入度为0的点即可.,第2问,max(入度为0的点 ...

  5. 洛谷——P2434 [SDOI2005]区间

    P2434 [SDOI2005]区间 题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间 ...

  6. c标准库函数 strcat

    函数原型:extern char *strcat(char *dest,char *src) 参数说明:dest为一个目的字符串的指针,即被连接的字符串(在前),src为一个源字符串的指针(在后).所 ...

  7. springboot 第一个程序

    idea --> new project --> 选择Spirng Initializr --> next 傻瓜式操作  --> 添加web依赖 项目基本结构: 创建contr ...

  8. zookeeper的集群部署

    1.上传安装包到集群服务器 2.解压 3.修改配置文件 进入zookeeper的安装目录的conf目录 cp zoo_sample.cfg zoo.cfg vi zoo.cfg # The numbe ...

  9. Visual Studio VS如何拷贝一个项目的窗体文件到另一个项目

    1 比如下我有一个项目,我要把这个Config整个窗体和代码拷贝到另一个项目   2 在新项目中添加现有项,然后把这个窗体相关的三个文件都添加到新的项目中   3 然后在新窗体中就什么都有了     ...

  10. Hibernate中的自己定义类型——UserType、CompositeUserType

    一.UserType Hibernate拥有自己定义映射表属性的机制.主要通过实现接口UserType,详细的UserType: import java.sql.PreparedStatement; ...