Codeforces Round #616 (Div. 2) D
莫队的模板
struct node{
int l,r,id;
}q[maxn];
int cmp(node a,node b) {
return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.l] & ) ? a.r < b.r : a.r > b.r);
} n=strlen(s);
size = sqrt(n);
bnum = n / size;
for(int i = ; i <= bnum; ++i)
for(int j = (i - ) * size + ; j <= i * size; ++j) {
belong[j] = i;
}
int ql = q[i].l, qr = q[i].r;
while(l < ql) now -= !--cnt[aa[l++]];
while(l > ql) now += !cnt[aa[--l]]++;
while(r < qr) now += !cnt[aa[++r]]++;
while(r > qr) now -= !--cnt[aa[r--]];
ans[q[i].id] = now;//now代表ql~qr之间有多少不同的数字
思路:
区间有多少种不同的字母,ql==qr yes ,三种以上yes,首尾不相等的yes其他都是no
莫队写法
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define it register int
#define lowbit(x) (x)&(-x)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e5+;
char s[maxn];
int cnt[maxn],belong[maxn],b[maxn],l=,r=,now=,n,ql,qr,ls,ci;
struct node{
int l,r,id,da;
}q[maxn];
int cmp(node a,node b) {
return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.l] & ) ? a.r < b.r : a.r > b.r);
}
int cmp1(node a,node b){
return a.id<b.id;
}
il void add(int pos){
if(!cnt[s[pos]-'a']){++now;}
++cnt[s[pos]-'a'];
}
il void del(int pos){
--cnt[s[pos]-'a'];
if(!cnt[s[pos]-'a'])--now;
}
il int work(int q,int p){
while(l<q)del(l++);
while(l>q)add(--l);
while(r<p)add(++r);
while(r>p)del(r--);
return now;
}
int main(){
scanf("%s",s+);
ls=strlen(s+);
ci=sqrt(ls);
int ge=ls/ci;
for(it i=;i<=ge;i++){
for(it j=(i-)*ci+;j<=i*ci;j++){
belong[j]=i;
}
}
scanf("%d",&n);
for(it i=;i<n;i++){
scanf("%d%d",&q[i].l,&q[i].r);q[i].id=i;
}
sort(q,q+n,cmp);
for(it i=;i<n;i++){
it ql=q[i].l,qr=q[i].r;
it z=work(ql,qr);
if(ql==qr){
q[i].da=;
}
else if(z>=){
q[i].da=;
}
else if(s[ql]!=s[qr]){
q[i].da=;
}
else{
q[i].da=-;
}
}
sort(q,q+n,cmp1);
for(it i=;i<n;i++){
printf(q[i].da==?"Yes\n":"No\n");
}
return ;
}
二维树状数组写法
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define it register int
#define lowbit(x) (x)&(-x)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e5+;
char s[maxn];
struct node{
int tr[maxn];
void inint(){
memset(tr,,sizeof(tr));
}
void updata(int x,int y){
for(int i=x; i<=maxn; i+=lowbit(i)){
tr[i]+=y;
}
}
int geshu(int x,int y){
int sum1=,sum2=;
for(int i=x; i>; i-=lowbit(i)){
sum1+=tr[i];
}
for(int i=y; i>; i-=lowbit(i)){
sum2+=tr[i];
}
return sum2-sum1;
}
} a[];
int main(){
for(it i=;i<;i++){
a[i].inint();
}
scanf("%s",s+);
int ls=strlen(s+);
for(it i=;i<=ls;i++){
a[s[i]-'a'].updata(i,);
}
it n,l,r;
scanf("%d",&n);
for(it i=;i<n;i++){
scanf("%d%d",&l,&r);
it z=;
if(l==r || s[l]!=s[r]){
printf("Yes\n");continue;
}
for(it i=;i<;i++){
if(a[i].geshu(l,r)){
z++;
}
}
if(z>=){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return ;
}
这场打得有些自闭了
搞不懂c题,B题wa4发发现思路是错误的,最后在辉辉给出正确思路之后才过
D题就瞄了一眼,以为很难,赛后补题写了一个二维树状数组就过了,看了大佬的博客发现可以用莫队写,就试着用模板写
Codeforces Round #616 (Div. 2) D的更多相关文章
- Codeforces Round #616 (Div. 2) B. Array Sharpening
t题目链接:http://codeforces.com/contest/1291/problem/B 思路: 用极端的情况去考虑问题,会变得很简单. 无论是单调递增,单调递减,或者中间高两边低的情况都 ...
- Codeforces Round #616 (Div. 2) C. Mind Control
题目链接:http://codeforces.com/contest/1291/problem/C 思路: 我们可以很容易想到,只有前m-1个人才能影响m的选择的大小,后面的人无法影响. 如果所有人都 ...
- Codeforces Round #616 (Div. 2)
地址:http://codeforces.com/contest/1291 A题就不写解析了,就是给一个数,是不是本身满足这个条件或者删除某些数字来达到这个条件:奇数,各个位上的数字加起来是偶数. # ...
- Codeforces Round #616 (Div. 2) 题解
A. Even But Not Even 题意: 定义一个数所有位置的和为偶数它本身不为偶数的数为ebne,现在给你一个数字字符串,你可以删除任意位置上的数字使其变为ebne输出任意改变后的结果,如果 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
随机推荐
- DOM深度优先遍历算法
通过深度优先遍历算法,可以依次获取每个后代节点的对象. 顺序:有子元素先获取子元素,再获取兄弟元素 主要有2步骤: //1.创建节点迭代器对象(parent是要遍历的节点) var iterator ...
- 【转载】Java中的容器讲解
转自:http://blog.csdn.net/garfielder007/article/details/52143794 Set,List,Map,Vector,ArrayList的区别 Java ...
- 关于Ajax请求的JS封装函数
每次连接ajax都要重复写很多代码,所以写了一个JS封装函数,如下: 再来解释一下其中obj对象的参数形式: obj={ 'type':提交方式, get/post 'url' : 提交地址, ...
- 【一句话解释】docker and vm
效果 在一个host上面运行多个os,达到快速部署以及充分利用资源的额目的 vm 虚拟机,会模拟一个完整的操作系统堆栈出来. 缺点开销大,优点,guest os 是一个完整的操作系统 根据hyperv ...
- oracle11g UNDO使用率高,且unexpire过高
1.查看使用率: col USED_PER for a60 SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME, ,) AS TOTAL_GB, ,) AS FRE ...
- 大数据的特征(4V+1O)
数据量大(Volume):第一个特征是数据量大,包括采集.存储和计算的量都非常大.大数据的起始计量单位至少是P(1000个T).E(100万个T)或Z(10亿个T). 类型繁多(Variety):第二 ...
- linux下修改mysql的编码格式
修改编码格式:https://blog.csdn.net/qq_30038111/article/details/79376137 改编码格式在配置文件中修改才有效,在命令行中修改没效 ...
- 后台用map接收数据,报类型转换错误
如果后台用接收接收前台传的数据时,因为不确定具体是哪一种类型而报错,可以使用 instanceOf if (dataMap.get("salePrice") instanceof ...
- [已解决]Mac 升级至10.15 VM 出现黑屏等
关闭Rootless 进入恢复模式(重启系统时按住command+R进入恢复模式)下打开终端; 关闭系统SIP保护:csrutil disable; 重启,进入正常系统; 解决无法添加VMware辅助 ...
- winform BackgroundWorker 的用法 - 异步执行
1.设置 backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation = ...