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. hrbust-1909理工门外的树,不用线段数,贪心思路~~

    理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 605(125 users) Total Accepted: 154(11 ...

  2. HDU 4418 高斯消元解决概率期望

    题目大意: 一个人在n长的路径上走到底再往回,走i步停下来的概率为Pi , 求从起点开始到自己所希望的终点所走步数的数学期望 因为每个位置都跟后m个位置的数学期望有关 E[i] = sigma((E[ ...

  3. poj3468区间延迟更新模板题

    #include<stdio.h> #include<string.h> #define N 100000 struct st{  int x,y;  __int64 yanc ...

  4. THUPC2018看题总结

    THUPC2018看题总结 #6387. 「THUPC2018」绿绿与串串 / String 据说是签到题啊. 首先根据题目的意思,我们发现如果能找到那个最后一次选择的对称轴岂不是美滋滋. 自然地,我 ...

  5. [NOI2012(bzoj2879)(vijos1726)]美食节 (费用流)

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2288  Solved: 1207[Submit][Status ...

  6. Java多线程分析案例

    1. 多线程的创建方式 (1).继承 Thread类:但Thread本质上也是实现了Runnable 接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过 Thread 类的 sta ...

  7. linux文件描述符fd(windows下的句柄)

    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件 fd:file descriptor 文件描述符0,1,2分别给了标准输入.标准输出和错误输出. ls - ...

  8. atomic原子操作

    C++中对共享数据的存取在并发条件下可能会引起data race的未定义行为,需要限制并发程序以某种特定的顺序执行,有两种方式:1.使用mutex保护共享数据: 2.原子操作 原子操作:针对原子类型操 ...

  9. 【c++】多重继承与虚继承

    派生类的构造函数初始化列表将实参分别传递给每个直接基类,其中基类的构造顺序与派生列表中基类的出现顺序保持一致,而与派生类构造函数初始化列表中基类的顺序无关. 类型转换与多个基类 编译器不会在派生类向基 ...

  10. 利用Druid实现应用和SQL监控

    一.关于Druid Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可 ...