关闭

[整体二分] Codechef January Challenge 2018 #MONSTER Killing Monsters

104人阅读 评论(0) 收藏 举报
分类:

整体二分,然后问题变成,子集加,单点查询,然后像CTSC吉夫特 可以用经典的二进制分高位低位的搞搞。调个参,大概是高5位低12位。
不知道在线怎么做。

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define pb push_back
using namespace std;
typedef long long ll;

inline char nc(){
  static char buf[100000],*p1=buf,*p2=buf;
  return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline void read(int &x){
  char c=nc(),b=1;
  for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
  for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()) if (c=='-') b=-1;
}
inline void read(ll &x){
  char c=nc(),b=1;
  for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
  for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()) if (c=='-') b=-1;
}

const int N=500005;

int n,m;
ll h[N];
int x[N],y[N];

int tim[N],cc[N];

const int S=12;
const int ss=(1<<S)-1;
ll a[N];
inline void Add(int x,int y){
  int x0=x>>S,x1=x&ss;
  for (int i=x0;;i=(i-1)&x0){
    a[(i<<S)|x1]+=y;
    if (i==0) break;
  }
}
inline void Dec(int x,int y){
  int x0=x>>S,x1=x&ss;
  for (int i=x0;;i=(i-1)&x0){
    a[(i<<S)|x1]-=y;
    if (i==0) break;
  }
}
inline bool Query(int x,ll y){
  int x0=x>>S,x1=x&ss;
  for (int i=x1^ss;;i=(i-1)&(x1^ss)){
    y-=a[x0<<S|(i^ss)];
    if (y<=0) return 0;
    if (i==0) break;
  }
  return 1;
}

inline void Solve(int l,int r,vector<int> &v){
  if (l==r){
    for (int i:v) tim[i]=l;
    return;
  }
  vector<int> lv,rv;
  int mid=(l+r)>>1;
  for (int i=l;i<=mid;i++)
    Add(x[i],y[i]);
  for (int i:v)
    if (Query(i,h[i]))
      rv.pb(i);
    else
      lv.pb(i);
  Solve(mid+1,r,rv);
  for (int i=l;i<=mid;i++)
    Dec(x[i],y[i]);
  Solve(l,mid,lv);
}

int main(){
  freopen("t.in","r",stdin);
  freopen("t.out","w",stdout);
  read(n); for (int i=0;i<n;i++) read(h[i]);
  read(m); for (int i=1;i<=m;i++) read(x[i]),read(y[i]),x[i]&=(1<<17)-1;
  vector<int> v; for (int i=0;i<n;i++) v.pb(i);
  Solve(1,m+1,v);
  for (int i=0;i<n;i++) cc[tim[i]]++;
  int ret=n;
  for (int i=1;i<=m;i++)
    printf("%d\n",ret-=cc[i]);
  return 0;
}
0
0
查看评论

CC MONSTER Killing Monsters

题面在这里 题意: 游戏中初始时有n只怪兽排成一排,从左到右编号为0~n?1。第i只怪兽的初始血量为hi,当怪兽的血量小于等于0时,这只怪兽就挂了。 大厨要进行q次操作。每次操作中,大厨会选择两个整数x和y,并向下标k满足k&x=k的怪兽开炮(此处&代表按位与操作)。被炮弹...
  • bestFy
  • bestFy
  • 2018-01-18 12:35
  • 93

CC Killing Monsters 分块+DP(SoS)

题意:n个怪兽 第i只的血量为h[i].Q次操作,第i次操作为(x,y) 对所有满足i&x=i的下标i 其血量减少y. n0. 给出x  x&i==i的下标i 肯定为x的子集  例如x=011110 i= 0????0 ?可以为0或者1. 子集什么,试一...
  • noone0
  • noone0
  • 2018-01-21 17:59
  • 115

[Contest] Codechef January Challenge 2018

发烧在家躺了一个星期呢… Rectangle 直接判一下是不是有两对相等的 Maximum Score 倒过来贪心,每次选最大的能选的 K-Concatenation 分三种情况讨论就完了,在一个串呢,在两个串呢,跨越n-2个串 Partition the number...
  • Coldef
  • Coldef
  • 2018-01-16 09:14
  • 96

395. Longest Substring with At Least K Repeating Characters

题目 给定一个字符串,给定一个数字k,找这个字符串里的最大子串的长度,子串满足的条件是:里面的每一个字母都出现了至少k次。 例如: Input: s = "ababbc", k = 2 Output: 5 The longest substring is "...
  • littleorange6
  • littleorange6
  • 2016-09-06 21:06
  • 566

[Contest]CodeChef January Challenge 2018

RECTANGL:学习了ifif语句的用法。 MAXSC:贪心。 KCON:贪心。 PRTITION:乱搞题。 STRMRG:O(n2)O(n^2)DP。 MONSTER:整体二分+暴力。。 XYHUMOQ:奇妙的搜索。。设f0,f1,g0,g1f_0,f_1,g_0,g_1分别表示前(...
  • Vectorxj
  • Vectorxj
  • 2018-01-15 20:09
  • 71

[杜教筛] Codechef January Challenge 2018 #SQRGOOD Simplify the Square Root

二分转化为μ2\mu^2的前缀和。 然后转化为O(n13)O(n^{1\over 3})的运算,但是需要预处理μ\mu的前缀和,大力杜教筛求和。 然后感谢阿爷教我把二分改成了迭代,小范围内一个一个挪,用rho求μ(n)\mu(n),然后就能卡进去了。 复杂度似乎是萎的吧。 #include ...
  • u014609452
  • u014609452
  • 2018-01-19 14:16
  • 76

[树形DP][后缀自动机][后缀树] CodeChef January Challenge 2018 KILLKTH

SolutionSolution 反串的后缀自动机的parent树就是原串的后缀树。 按dfs序记录子树大小前缀和,二分位置。 定位后就可以在节点内二分(可以直接算的啦) #include #define show(x) cerr using namespace std; typed...
  • Vectorxj
  • Vectorxj
  • 2018-01-23 21:04
  • 44

cdq分治和整体二分

cdq分治和整体二分的简单应用。
  • zzkksunboy
  • zzkksunboy
  • 2017-04-22 17:26
  • 628

USACO 2018 January Contest Platinum A: Lifeguards 题解

将所有的区间按左端点从小到大排序 我们处理那些被完全包含的区间,这些区间即使删除也不会使答案变坏 这样先删一波,如果发现这种小区间的个数多于k,就可以直接算答案了 否则我们要dp 设dp[i][j]为考虑到第i个区间,已经删除了j个区间,且第i个区间没有被删除的情况下最大的覆盖长度 显然有...
  • IcePrincess_1968
  • IcePrincess_1968
  • 2018-01-23 23:58
  • 82

Codechef 2017 March Challenge 简要题解

在比赛进行到一半的时候才参加,,导致challenge没法搞得很好       写一个简要题解吧,,challenge太差了就不放了 Xenny and Alternating Tasks:直接按照题意模拟即可。 Bear and Extra Number:首先处理...
  • lych_cys
  • lych_cys
  • 2017-03-13 21:01
  • 752
    个人资料
    • 访问:364255次
    • 积分:13016
    • 等级:
    • 排名:第1238名
    • 原创:975篇
    • 转载:3篇
    • 译文:0篇
    • 评论:56条
    文章分类
    最新评论