08:Challenge 1
2018-06-17 22:05:33来源:未知 阅读 ()
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 262144kB
- 描述
-
给一个长为N的数列,有M次操作,每次操作是以下两种之一:
(1)修改数列中的一个数
(2)求数列中某位置在某次操作后的值
- 输入
- 第一行两个正整数N和M。
第二行N个整数表示这个数列。
接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的值修改为y;若该字符为'Q',则表示一个询问操作,接下来两个整数x和y,表示求x位置在第y次操作后的值。 - 输出
- 对每一个询问操作单独输出一行,表示答案。
- 样例输入
-
5 3 1 2 3 4 5 Q 1 0 M 1 3 Q 1 2
- 样例输出
-
1 3
- 提示
- 1<=N<=10^5,1<=M<=10^5,输入保证合法,且所有整数可用带符号32位整型存储。
- 查看
- 提交
- 统计
- 提问
很多人第一眼看到这道题觉得要用主席树什么的了。
但是。
rope大法好!!。
没什么好解释的,就是个裸地不能再裸地模板题,,,
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<ext/rope> using namespace std; using namespace __gnu_cxx; const int MAXN=2000050; const int maxn=0x7fffffff; void read(int &n) { char c='+';int x=0;bool flag=0; while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();} flag==1?n=-x:n=x; } rope<int> *rp[MAXN]; int a[MAXN]; int tot=0; int main() { ios::sync_with_stdio(0); int n,m; read(n);read(m); for(int i=1;i<=n;i++) read(a[i]); rp[0]=new rope<int>(a+1,a+n+1); for(int i=1;i<=m;i++) { rp[i]=new rope<int>(*rp[i-1]); char c=getchar(); int x,y; if(c=='Q') { int l,r; int ans=0; read(l);read(r);read(x); for(int i=l;i<=r;i++) ans+=(rp[x]->at(i-1)); printf("%d\n",ans); } else { read(x);read(y); rp[i]->replace(x-1,y); } } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:P1886 滑动窗口
下一篇:3674: 可持久化并查集加强版
- 测量C++程序运行时间 2020-04-17
- Emergency Evacuation(最短下车时间)———(思维) 2020-04-11
- linux环境下的时间编程 2020-03-27
- C++常见编程--获取当前系统时间 2020-02-25
- 算法训练 旅行家的预算 2020-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash