C 给出一个m 此时有 四个数 分别为x k*x k*k*x k*k*k*x k大于1 x大于等于1 要求求出来一个最小的值n 使其满足 这四个数中的最大值小于n 这四个数可能的组数为m

可以看出这四个数递增 所以最大值必定是第四个

所以我们二分n 需要注意的是longlong可以定义到1e18 初始应当是l小于等于可能的最小值(0) r大于等于可能的最大值(1e18) 如果初始范围就定义错误的话 二分不会出现正确答案

在这里由于控制l=mid+1或者r=mid-1 这一类的时候 容易丢失mid 造成一些麻烦 所以采用了一种看起来比较暴力的写法 当满足judge==m时直接break出来 然后while控制变小

因为如果满足过judge 就一定不是-1

需要注意的是避免i*i*i爆int 提前初始化省时间

时间复杂度是二分(最大64 )*1e6

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
using namespace std;
long long n,m;
long long a[1000050];
void init()
{
for(long long i=1;i<=1000000;i++)
{
a[i]=i*i*i;
}
}
long long judge(long long z)
{
long long res=0;
for(int i=2;i<=1000000;i++)
{
if(z/a[i]==0)
return res;
res+=(z/a[i]);
}
return res;
}
int main()
{
while(~scanf("%lld",&m))
{
init();
long long l=0;
long long r= 1e18+50000000;
long long mid;
while(l<=r)
{ mid=(l+r)>>1;
long long z=judge(mid);
if(z>m)
{
r=mid-1;
}
else if(z<m)
{
l=mid+1;
}
else break;
}
if(judge(mid)==m)
{
while(true)
{
mid--;
if(judge(mid)==m){
continue;
}
else {
printf("%lld\n",mid+1);
break;
}
}
} else printf("-1\n");
}
}

D 给出两个数组 求出满足条件的l r组数 max第一组a[l-r] = min第二组b[l-r]

比赛的时候去掉了线段树莫队rmq 因为如果抽象询问的话 最后是n*(n+1)/2次询问 n是2e5 太大

也想到过二分 因为看起来应该采用nlogn的办法 然而因为二分需要满足稳定的递增 就排除了

赛后看题解..居然真的是二分+rmq  记得那场cf感觉奇难 AB打完一个小时就过去了 怎么可能想出来二分+数据结构这种神奇的办法

这个算法里面 rmq的预处理是nlogn的 查询是1的 二分的查询也是常数的 所以总体是nlogn的

http://blog.csdn.net/Miracle_ma/article/details/51860149 这道题的思想和rmq模板都来自于这个博客

每次我们枚举i 以i作为左区间枚举右区间 满足max-min=0

第一次我们得到的是 最左的不满足的 第二次得到的是 最右的满足的 相减就是i做左区间的右区间范围

需要注意的是ans可能爆int

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<queue>
#include<iostream>
#include<vector>
using namespace std;
int a[200050];
int b[200050];
int aa[200050][25];
int bb[200050][25];
int n;
void rmq_inita()
{
for(int i=0; i<n; i++) aa[i][0]=a[i];
for(int j=1; (1<<j)<=n; j++)
{
for(int i=0; i+(1<<j)-1<n; i++)
{
aa[i][j]=max(aa[i][j-1],aa[i+(1<<(j-1))][j-1]);
}
}
} void rmq_initb()
{
for(int i=0; i<n; i++) bb[i][0]=b[i];
for(int j=1; (1<<j)<=n; j++)
{
for(int i=0; i+(1<<j)-1<n; i++)
{
bb[i][j]=min(bb[i][j-1],bb[i+(1<<(j-1))][j-1]);
}
}
} int rmqa(int L,int R)
{
int k=0;
while((1<<(k+1))<=R-L+1) k++;
return max(aa[L][k],aa[R-(1<<k)+1][k]);
} int rmqb(int L,int R)
{
int k=0;
while((1<<(k+1))<=R-L+1) k++;
return min(bb[L][k],bb[R-(1<<k)+1][k]);
}
int main()
{
while(cin>>n)
{
for(int i = 0; i<n; i++)cin>>a[i];
for(int i = 0; i<n; i++)cin>>b[i];
rmq_inita();
rmq_initb();
long long int ans= 0;
for(int i=0; i<n; i++)
{
long long int res=0;
int l = i;
int r = n-1;
while(l<=r)
{
int mid = (l + r)>>1;
if(rmqa(i,mid)-rmqb(i,mid)<0)
{
l = mid + 1;
}
else r = mid - 1;
}
res= l;
l = i;
r = n-1;
while(l<=r)
{
int mid = (l + r)>>1;
if(rmqa(i,mid)-rmqb(i,mid)>0)
{
r = mid - 1;
}
else l = mid + 1;
}
ans += l-res;
}
printf("%lld\n",ans);
}
}

  

Codeforces Round #361 (Div. 2) C D的更多相关文章

  1. Codeforces Round #361 (Div. 2) C.NP-Hard Problem

    题目连接:http://codeforces.com/contest/688/problem/C 题意:给你一些边,问你能否构成一个二分图 题解:二分图:二分图又称作二部图,是图论中的一种特殊模型. ...

  2. Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 离散化 排列组合

    E. Mike and Geometry Problem 题目连接: http://www.codeforces.com/contest/689/problem/E Description Mike ...

  3. Codeforces Round #361 (Div. 2) D. Friends and Subsequences 二分

    D. Friends and Subsequences 题目连接: http://www.codeforces.com/contest/689/problem/D Description Mike a ...

  4. Codeforces Round #361 (Div. 2) C. Mike and Chocolate Thieves 二分

    C. Mike and Chocolate Thieves 题目连接: http://www.codeforces.com/contest/689/problem/C Description Bad ...

  5. Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs

    B. Mike and Shortcuts 题目连接: http://www.codeforces.com/contest/689/problem/B Description Recently, Mi ...

  6. Codeforces Round #361 (Div. 2) A. Mike and Cellphone 水题

    A. Mike and Cellphone 题目连接: http://www.codeforces.com/contest/689/problem/A Description While swimmi ...

  7. Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 && 离散化】

    任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...

  8. Codeforces Round #361 (Div. 2) D

    D - Friends and Subsequences Description Mike and !Mike are old childhood rivals, they are opposite ...

  9. Codeforces Round #361 (Div. 2) C

    C - Mike and Chocolate Thieves Description Bad news came to Mike's village, some thieves stole a bun ...

  10. Codeforces Round #361 (Div. 2) B

    B - Mike and Shortcuts Description Recently, Mike was very busy with studying for exams and contests ...

随机推荐

  1. BestCoder Round #65

    博弈 1002 ZYB's Game 题意:中文 分析:假定两个人是绝顶聪明的,一定会采取最优的策略.所以如果选择X的左边的一个点,那么后手应该选择X的右边对称的点,如果没有则必输,否则必胜,然后再分 ...

  2. CSS background 属性

    CSS 参考手册 实例 如何在一个声明中设置所有背景属性: body { background: #00FF00 url(bgimage.gif) no-repeat fixed top; } 亲自试 ...

  3. POJ3613 Cow Relays(矩阵快速幂)

    题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...

  4. [转]Mac 科研常用软件

    转自:http://bbs.feng.com/read-htm-tid-7698336.html 我的 Mac 是 2012 年的 Pro Retina,现在主要用的是 Mac 系统,Windows ...

  5. float了的元素和内联元素不支持margin:auto

    float了的元素和内联元素不支持margin:auto

  6. BZOJ3172[Tjoi2013]单词 题解

    题目大意: 求一些字符串在一段文章中出现的次数. 思路: AC自动机的经典应用,建完自动机直接将队列里的元素调Fail指针记录即可. 代码: #include<cstdio> #inclu ...

  7. windows下cmd时复制dos中的内容 错误信息等

    16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.

  8. 【HDU】3516 Tree Construction

    http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意:平面n个点且满足xi<xj, yi>yj, i<j.xi,yi均为整数.求一棵树边 ...

  9. URAL 1346. Intervals of Monotonicity(DP)

    题目链接 错误的贪了一下,然后D了两下就过了.注意是不上升和不下降..不是上升和下降.. #include <cstring> #include <cstdio> #inclu ...

  10. C程序演示产生僵死进程的过程

    先抄录网上一段对僵死进程的描述: 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中.这种 ...