专题0:一些巧法

问题 D: 染色

时间限制: 1 Sec  内存限制: 128 MB
[提交] [状态]

题目描述

有编号为0到M 的(M+1)个格子,现在有N个操作 (x,y),表示将从x 到 y的格子染色,问一共有多少个格子被染色。

输入

第一行两个整数,分别表示N和M。
接下来有N行,每行两个整数,分别表示x和y。

输出

输出一个整数,表示有多少个格子被染色。

样例输入 Copy

3 10
0 5
2 6
8 9

样例输出 Copy

9

提示

30%的数据满足N,M<=10000
100%的数据满足N,M<=1000000;任何操作保证0<=x<=y<=M。

 

由这个表可知:结合代码理解,高级版南门的树(中级版是排序) 

 012345678910
10100000100
00000110010

 

#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pp;
#define fi first
#define se second
#define pb push_back
const double eps=1e-6;
const double pi=cos(-1);
const int N=1000005;
const int mod=1e9+7;
int n,bl,ml,ans=-1;
int head[N],tail[N];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        head[a]++;
        tail[b]++;
    }
    int sum=0,ans=0;
    for(int i=0;i<=m;i++)
    {
       sum+=head[i];
       if(sum>0) ans++;
       sum-=tail[i];
    }
    printf("%d",ans);
    return 0;
}
 
/**************************************************************
    Problem: 14888
    User: 2019UPC110
    Language: C++
    Result: 正确
    Time:273 ms
    Memory:9836 kb
****************************************************************/

问题 D: 胖虎的序列

时间限制: 1 Sec  内存限制: 128 MB
[提交] [状态]

题目描述

胖虎在SXYZ比较自闭,于是他自己就制造了一个序列,在这个序列里的数全部由正整数构成。
你别认为这个序列很神奇--其实就是1,2,3,4,...,n,其中n是给定的。胖虎满意地去上厕所时,小C,过来机惨胖虎,他准备将胖虎的序列全部变为0,可就在这时,胖虎突然回来了,小C的计划破灭了...吗?这时机智小C对胖虎说:我可以每次从这个序列中选取一些数,然后将选取的这些数减去一个相同的正整数。然后经过有限次这样的操作后(每次操作减去的正整数可以不同),这个序列就可以全变成0。

输入

一个正整数n(1≤n≤109)

输出

最少操作次数

样例输入 Copy

【样例1】
2
【样例2】

样例输出 Copy

【样例1】
2
【样例2】
2

提示

样例1中序列为1,2--①我们第一次选取1,2,将这两个数都减去1,得到0,1--②,再在序列②中选取1,减去1,得到序列0,0操作次数为2
样例2序列为1,2,3--①我们第一次选取2,3,将这两个数都减去2,得到1,0,1--②,再在序列②中选取1,1,减去1,得到序列0,0,0操作次数为2

 

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#include<stack>
using namespace std;
typedef long long ll;
const int N=100005;
int A[N];
int main()
{
  ll n,m=1;
  scanf("%lld",&n);
int cnt=0;
while(1)
{
    if(m>n) break;
    m*=2;
    cnt++;
}
printf("%d",cnt);
    return 0;
}
 
 
/**************************************************************
    Problem: 15046
    User: 2019UPC110
    Language: C++
    Result: 正确
    Time:1 ms
    Memory:2412 kb
****************************************************************/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值