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. 表连接sql执行计划学习

    循环嵌套连接(Nested Loop Join) 合并连接(Merge Join) 哈西匹配(Hash Join) 文章:浅谈SQL Server中的三种物理连接操作 循环嵌套,如果内循环列上有索引, ...

  2. ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码

    ubuntu使用git提交github时,执行pull或者push命令要重新输入用户名和密码: 1:问题现象: hlp@hlp:~/code/github_code/catch_imooc1$ git ...

  3. fedora安装后,yum命令不能使用,Cannot retrieve metalink for repository: fedora. Please verify its path and try again 解决方法

    fedora安装后,yum命令不能使用,Cannot retrieve metalink for repository: fedora. Please verify its path and try ...

  4. jQuery的对象访问函数(get,index,size,each)

    1.get() 元素集合 取得所有匹配的 DOM 元素集合. 这是取得所有匹配元素的一种向后兼容的方式(不同于jQuery对象,而实际上是元素数组). 如果你想要直接操作 DOM 对象而不是 jQue ...

  5. [Bzoj5179][Jsoi2011]任务调度(左偏树)

    5179: [Jsoi2011]任务调度 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5  Solved: 4[Submit][Status][Di ...

  6. chrome插件vimium的安装和使用

    vimium工具的作用:使你脱离鼠标,使用键盘方便操作页面,默认对所有网站生效 1.chrome商店里有的,但是,我怎么安装,都不行 2.源码安装:http://vimium.github.io/ h ...

  7. hdu 3624 City Planning(暴力,也可扫描线)

    City Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. DRBD原理知识

    DRBD(Distributed Relicated Block Device 分布式复制块设备), 可以解决磁盘单点故障.一般情况下只支持2个节点. 大致工作原理如下图: 一般情况下文件写入磁盘的步 ...

  9. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

  10. Highcharts:X轴分组堆叠图

    在设计一个项目中的数据展示页面时.想要设计双X轴,一个轴显示须要的项.一个轴对这些项进行分组.效果如图: Highcharts自带双X轴展示方式.可是效果不是太理想.调整起来也会麻烦些 看到Highc ...