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. Vim enhance part1

    NO1 .认识.命令 例 删除man.config中第1到30行的注释 1.光标移到#上,按下x删除 2.按下j将光标移到第二行#上,之后按下. 3.可以看到第2行的#也被删除了因为.就是重复上次命令 ...

  2. AlertDialog自定义

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. Memcached Redis相关的干货

    为了以后查阅方便,所以转了各位的博文,感谢各位原博主. http://www.searchtb.com/2011/05/redis-storage.html           redis内存存储结构 ...

  4. POJ 1661 Help Jimmy【DP】

    基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...

  5. Python 列表的复制操作

    2013-10-18 10:07:03|   import copy a = [1,2,3,['a','b']] b = a c = a[:] d = copy.copy(a) e = copy.de ...

  6. Palindrome--poj 1159(最长公共子字符串+滚动数字)

    http://poj.org/problem?id=1159 题目大意:  给你一个n  代表n个字符   第二行给你一个字符串  求使这个字符串变成回文字符串 最少需要添加多少个字符 分析:   原 ...

  7. Windows平台kafka环境的搭建

    注意:Kafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper 下载安装文件: http://kafka.apache.org/downloads.htm ...

  8. 【APUE】用户态与内核态的区别

    当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中 执行.当进程处于内核态时,执行的内核代码会使用当前进程 ...

  9. apc smart UPS下使用apcupsd注意事项

    公司的apc smart UPS安装有管理卡(似乎是AP-9631),server环境有FreeBSD.Windows Server.Linux(CentOS.Ubuntu) 实际使用中有例如以下问题 ...

  10. 《从0到1》读书笔记第一章&quot;未来的挑战&quot;第1记:把握潮流风向

    这几天刚到手当前炙手可热的来自PayPal创始人Peter Thiel的<Zero to One>.中文名<从0到1>,由高玉芳翻译.中信出版社出版.由于到货时刚好有事情在忙, ...