zoukankan      html  css  js  c++  java
  • HDU 6274 二分+预处理(CCPC K题

     1 #include"bits/stdc++.h"
     2 #define db double
     3 #define ll long long
     4 #define vec vector<ll>
     5 #define Mt  vector<vec>
     6 #define ci(x) scanf("%d",&x)
     7 #define cd(x) scanf("%lf",&x)
     8 #define cl(x) scanf("%lld",&x)
     9 #define pi(x) printf("%d
    ",x)
    10 #define pd(x) printf("%f
    ",x)
    11 #define pl(x) printf("%lld
    ",x)
    12 using namespace std;
    13 const int N   = 1e6 + 5;
    14 int a[N],b[N],s[1010][1010],n; //s[x][y]表示对于所有a[i]==x时的b[i]%a[i]余数大于等于y的数目
    15 ll ret;
    16 bool check(ll x,ll k)
    17 {
    18     ll ans=ret*-1;
    19     for(int i=1; i<=1000; i++)
    20     {
    21         ans+=x/i*s[i][0]; //s[i][0]为a数组中等于i的数的个数
    22         ans-=s[i][x%i+1];  //减掉所有 c1<c2 的情况
    23     }
    24     return ans>=k;
    25 }
    26 ll cal(ll x)
    27 {
    28     ll l=1,r=1e13,mid;
    29     ll res=l;
    30     while(l<=r)
    31     {
    32         mid=(l+r)>>1;
    33         if(check(mid,x)) res=mid,r=mid-1;
    34         else l=mid+1;
    35     }
    36     return res;
    37 }
    38 int main()
    39 {
    40     int TA,T,x,y,z;
    41     scanf("%d",&TA);
    42     while(TA--)
    43     {
    44         scanf("%d%d",&n,&T);
    45         ret=0;
    46         memset(s,0, sizeof(s));
    47         for(int i=1; i<=n; i++) scanf("%d",&a[i]);
    48         for(int i=1; i<=n; i++) scanf("%d",&b[i]),ret+=(b[i]/a[i]),s[a[i]][b[i]%a[i]]++;
    49         for(int i=1; i<=1000; i++)
    50             for(int j=i-1; j>=0; j--)
    51                 s[i][j]+=s[i][j+1];
    52         while(T--)
    53         {
    54             scanf("%d%d",&z,&x);
    55             if(z==1)
    56             {
    57                 scanf("%d",&y);
    58                 for(int i=b[x]%a[x]; i>=0; i--) s[a[x]][i]--;
    59                 for(int i=b[x]%y; i>=0; i--)    s[y][i]++;
    60                 ret-=(b[x]/a[x]);
    61                 ret+=(b[x]/y);
    62                 a[x]=y;
    63             }
    64             else if(z==2)
    65             {
    66                 scanf("%d",&y);
    67                 for(int i=b[x]%a[x]; i>=0; i--) s[a[x]][i]--;
    68                 for(int i=y%a[x]; i>=0; i--)    s[a[x]][i]++;
    69                 ret-=(b[x]/a[x]);
    70                 ret+=(y/a[x]);
    71                 b[x]=y;
    72             }
    73             else
    74             {
    75                 printf("%lld
    ",cal(1ll*x));
    76             }
    77         }
    78     }
    79 }
  • 相关阅读:
    redis集群
    鉴权方案选择
    spring mvc 自定义handler不拦截静态资源
    servlet3
    压测工具 ab jmeter
    死锁产生的原因
    缓存方案:本地guavaCache, 远程redis?
    使用spring boot admin
    groovy使用小记
    python--面试题01
  • 原文地址:https://www.cnblogs.com/mj-liylho/p/9382887.html
Copyright © 2011-2022 走看看