题目

思路

预处理前缀和数组pre[N],然后l ~ r 的和就是pre[r] - pre[l - 1](当然可能和实际的l ~ r 的和是相反数,受到l的位置影响,不过不影响你让l ~ r 的和变为 0)
令 x = pre[r] - pre[l-1];

①x是奇数
那么你只要把 前缀和为 pre[l-1] + x/2 + ’1‘(注意这个1是和x同符号),并且位置在 l ~ r 的那个位置的杆子移除就行。

假设这个位置是p ,l ~ p - 1的贡献是 x/2,
因为移除了p,所以p + 1 ~ r 的贡献就会取反也就是 -x/2(因为p + 1 ~ r的每个‘+’,‘-’位置变化了 1,实际求和相当于翻转了),所以这么操作l ~ p - 1和p + 1 ~ r 的的贡献和就是 0 了

② x 是偶数 且不是 0(至少移除2个,不管你先移除哪一个都剩下奇数的贡献)

先移除掉位置r,这样贡献和就变成奇数,且不影响前面位置的贡献,这个时候,要考虑 r的贡献是 +1还是-1,这样移除r后,贡献和就变成了x=x-1,或x=x+1了,然后继续按奇数的情况把 前缀和为 pre[l-1] + x/2 + ‘1’,并且位置在 l ~ r 的那个位置的杆子移除就行.

代码

#include<bits/stdc++.h>
#define IOS std::ios_base::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);// 快读using namespace std;
struct ty{int p,s;ty(){}ty(int a,int b):p(a),s(b){}bool operator < (const ty &y) const {if(s == y.s)return p < y.p;return s > y.s;}
};const int N = 1e6 + 10;
vector<ty> a;
int pre[N];
string s;int main(){IOS//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout); int T;  cin >> T;for (int d = 1; d <= T; ++d){a.clear();int n,q;  cin >> n >> q >> s;for(int i = 0; i < n; ++i){ty x;x.p = i + 1;x.s = s[i] == '+' ? pow(-1,i%2):pow(-1,i%2 + 1);x.s += pre[i];pre[i + 1] = x.s;a.push_back(x);}sort(a.begin(), a.end()); while(q--){int l,r;    cin >> l >> r;int x = pre[r] - pre[l - 1];int f; if(x > 0) f = 1; else f = -1;if(!x){cout << 0 << '\n';}else if(abs(x)&1){x = x/2 + f;//加上与x同号的一个贡献auto it = lower_bound(a.begin(),a.end(),ty{l,pre[l - 1] + x});cout << 1 << '\n' << it->p <<'\n';}else{int y = s[r-1] == '+' ? pow(-1,r%2 + 1):pow(-1,r%2);if(y*x > 0) x = x/2;//x - y的贡献else x = x/2 - y;   //x + y的贡献auto it = lower_bound(a.begin(),a.end(),ty{l,pre[l - 1] + x});cout << 2 << '\n' << it->p << ' ' << r << '\n';}}}return 0;
}
//-++-

D2. Two Hundred Twenty One (hard version)相关推荐

  1. Codeforces Round #741 (Div. 2) D2. Two Hundred Twenty One (hard version) 前缀和 + 分段模型

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,+++代表111,−-−代表−1-1−1,让后有qqq个询问,每次询问[l,r][l,r][l,r]区间,将这段区间的数拿出来,设为 ...

  2. CodeForces - 1562D2 Two Hundred Twenty One (hard version)(二分)

    题目链接:点击查看 题目大意:定义一个前缀和公式 a1−a2+a3−a4+-=∑i=1n(−1)i−1⋅aia_1 - a_2 + a_3 - a_4 + \ldots=\sum\limits_{i= ...

  3. cf1562D Two Hundred Twenty One

    cf1562D Two Hundred Twenty One 题意: 定义一个前缀和公式:a1−a2+a3−a4+..=∑i=1n(−1)i−1∗aia_{1}-a_{2}+a_{3}-a_{4}+. ...

  4. Codeforces Round #730 (Div. 2) D2. RPD and Rap Sheet (Hard Version) 交互 + k进制的转换

    传送门 文章目录 题意: 思路: 题意: 定义a⊕kba\oplus_k ba⊕k​b为a,ba,ba,b在kkk进制下的不进位加法.系统会随机生成一个数xxx,你猜这个数,假设当前猜的数为yyy,如 ...

  5. Trainmaster One Hundred Twenty

    他是美国最伟大的探险家及创业家之一,但与贝尔(Bell),商务防水男表爱迪生(Edison),古德伊尔(Goodyear),及莱特兄弟(Wright brothers)等不同,他杰出的非凡成就其实并未 ...

  6. Codeforces Round #741 (Div. 2)

    Codeforces Round #741 (Div. 2) 题号 题目 知识点 A The Miracle and the Sleeper B Scenes From a Memory C Ring ...

  7. CodeForces - 1543D2 RPD and Rap Sheet (Hard Version)(交互+模拟)

    题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次,对于 ...

  8. Endianness

    Endianness(本文章转载于维基百科) From Wikipedia, the free encyclopedia (Redirected from Endianess) The terms e ...

  9. 决战秋招 -- 经典面试题集锦

    更新中- 文章目录 一.Sort 1. Bubble Sort 2. Quick Sort 3. Heap Sort 二.Tree 1. Traversal 2. 前序中序 --> 构建树/求后 ...

最新文章

  1. 利用棋盘格重新校正摄像头,求取Apriltag取向
  2. Science Advances文章揭示长时记忆的神经动态表征机制
  3. 汇编第二章节检测2-1
  4. 几张图可以理解GC JVM调优的内容
  5. #define typedef 区别
  6. 【Docker】Docker 一个偶现的错误 bash命令突然找不到
  7. android 两个视频合并,手机如何合并视频片段 安卓手机多个视频合并成一个的方法...
  8. arcgis地理配准_【更新70篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  9. PNP型三极管是不是要发射极接正电压,基极和集电极接地才能工作?能给张图不?
  10. 2020最新版python基础入门学习视频教程
  11. html/CSS 字体样式表 font-family:中文字体的英文名称
  12. 风电远程监控系统解决方案,双碳战略下新能源运维市场正当红
  13. 车牌识别之二:字符分割
  14. 第四章 账号权限管理
  15. 成为智者的四个敌人——唐望
  16. oracle rac部署示意图,Oracle 11g RAC部署手册 For Linux PDF
  17. Windows下载安装包格式说明
  18. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十一集
  19. 微信小程序支付 php后台对接完整代码
  20. 基于vue-cli快速构建

热门文章

  1. SQL数据库查询语句
  2. 使用计算机用眼卫生,长期用电脑致眼睛干涩 注意用眼卫生
  3. 传奇世界最好的版本:
  4. Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso
  5. springboot整合rabbitmq的发布确认,消费者手动返回ack,设置备用队列,以及面试题:rabbitmq确保消息不丢失
  6. 简单三步解除Word文档保护密码(转)
  7. Python爬虫实战示例-51job和豆瓣电影
  8. 小米昨天发布的新机,简直太TM牛了……
  9. 《程序员脱发指南》--饮食篇
  10. 细说——sqlmap