HDU 6274 二分+预处理(CCPC K题
#include"bits/stdc++.h"
#define db double
#define ll long long
#define vec vector<ll>
#define Mt vector<vec>
#define ci(x) scanf("%d",&x)
#define cd(x) scanf("%lf",&x)
#define cl(x) scanf("%lld",&x)
#define pi(x) printf("%d\n",x)
#define pd(x) printf("%f\n",x)
#define pl(x) printf("%lld\n",x)
using namespace std;
const int N = 1e6 + ;
int a[N],b[N],s[][],n; //s[x][y]表示对于所有a[i]==x时的b[i]%a[i]余数大于等于y的数目
ll ret;
bool check(ll x,ll k)
{
ll ans=ret*-;
for(int i=; i<=; i++)
{
ans+=x/i*s[i][]; //s[i][0]为a数组中等于i的数的个数
ans-=s[i][x%i+]; //减掉所有 c1<c2 的情况
}
return ans>=k;
}
ll cal(ll x)
{
ll l=,r=1e13,mid;
ll res=l;
while(l<=r)
{
mid=(l+r)>>;
if(check(mid,x)) res=mid,r=mid-;
else l=mid+;
}
return res;
}
int main()
{
int TA,T,x,y,z;
scanf("%d",&TA);
while(TA--)
{
scanf("%d%d",&n,&T);
ret=;
memset(s,, sizeof(s));
for(int i=; i<=n; i++) scanf("%d",&a[i]);
for(int i=; i<=n; i++) scanf("%d",&b[i]),ret+=(b[i]/a[i]),s[a[i]][b[i]%a[i]]++;
for(int i=; i<=; i++)
for(int j=i-; j>=; j--)
s[i][j]+=s[i][j+];
while(T--)
{
scanf("%d%d",&z,&x);
if(z==)
{
scanf("%d",&y);
for(int i=b[x]%a[x]; i>=; i--) s[a[x]][i]--;
for(int i=b[x]%y; i>=; i--) s[y][i]++;
ret-=(b[x]/a[x]);
ret+=(b[x]/y);
a[x]=y;
}
else if(z==)
{
scanf("%d",&y);
for(int i=b[x]%a[x]; i>=; i--) s[a[x]][i]--;
for(int i=y%a[x]; i>=; i--) s[a[x]][i]++;
ret-=(b[x]/a[x]);
ret+=(y/a[x]);
b[x]=y;
}
else
{
printf("%lld\n",cal(1ll*x));
}
}
}
}
HDU 6274 二分+预处理(CCPC K题的更多相关文章
- hdu 5080 2014ACM/ICPC鞍山K题 polya计数
首先,中心点是能够直接算出来的 把全部的坐标相加再除n就能够 然后枚举一个不靠近中心的点,枚举它绕中心点旋转的角度.仅仅要枚举50次就能够了 计算出当前枚举的的角度能否形成一个置换群 计算循环节,再用 ...
- HDU 5726 GCD 区间GCD=k的个数
GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)
M. Big brother said the calculation 通过线段树维护. 这个题和杭电的一道题几乎就是一样的题目.HDU5649.DZY Loves Sorting 题意就是一个n的排 ...
- hdu5080:几何+polya计数(鞍山区域赛K题)
/* 鞍山区域赛的K题..当时比赛都没来得及看(反正看了也不会) 学了polya定理之后就赶紧跑来补这个题.. 由于几何比较烂写了又丑又长的代码,还debug了很久.. 比较感动的是竟然1Y了.. * ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- HDU 2802 F(N)(简单题,找循环解)
题目链接 F(N) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- hdu 5008 查找字典序第k小的子串
Boring String Problem Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- hdu 4004 (二分加贪心) 青蛙过河
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...
- hdu 5089 使做对k-1题最大概率的选题方案
http://acm.hdu.edu.cn/showproblem.php?pid=5089 给出N道难度递增的题目,难度用可能做出的百分比表示,选出K道题目使得做出K-1道题目的概率最大. 选k题的 ...
随机推荐
- 使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据
大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤. 文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字: TeeC ...
- Java Knowledge series 7
Pepole who make a greate contribution on common libaraies deserve our respect. Component(Widget) / S ...
- u-boot分析(三)---boot命令实现以及内核的启动
上片博文总结出了u-boot的工作流程,今天我们来分析,u-boot的两个比较重要的内容 1. U-boot命令的实现 2. U-boot如何启动内核 l 命令实现 我们 ...
- C#实现屏幕指定区域截屏
//string Opath = @"C:/Picture"; //if (Opath.Substring(Opath.Length - 1, 1) != @ ...
- Spark Job调度
Spark Job调度 1.概览 Spark有几种用于在计算之间调度资源的工具.首先,回想一下,如集群模式概述中所述,每个Spark应用程序(SparkContext的实例)都运行一组独立的execu ...
- 利用PCHunter结束各种进程
http://www.epoolsoft.com/ 经测试,可结束主动防御等.
- nodejs封装的webget webpost方法
在我之前的项目中,经常用到Nodejs通过post\get方法访问其它网站.webapi.下面是我封装的 Get.Post方法,很适合在一些web字符串收发场景使用(暂不支持文件.二进制流等传输). ...
- 在ABAP里取得一个数据库表记录数的两种方法
方法1:使用函数EM_GET_NUMBER_OF_ENTRIES 这个函数使用起来很简单,只需要将想查询的数据库表名称维护进输入参数IT_TABLES: 上图说明这个函数支持批量操作,我查询的两张表名 ...
- javascript中的循环引用对象处理
先说明一下什么是循环引用对象: var a={"name":"zzz"}; var b={"name":"vvv"}; ...
- node 上的cookie的签名和解签名
cookie签名的原因是防止别人篡改cookie原本的值,如果这个过程中cookie被改变的话,就会在unsign方法返回false 代码: var cookie = require("co ...