Codeforces Round #104 (Div. 1) E Lucky Queries
来源:互联网 发布:js match函数 编辑:程序博客网 时间:2024/04/30 07:29
坑爹的360!劳资好不容易把div1的E搞出来了一编译居然被360怀疑哥的代码是病毒,擦!!坑爹么!!!尼玛敲个代码容易么!!!伤不起啊!反正劳资用这段病毒AC了!!
线段树延迟更新,只是要在比赛那么短的时间内敲出来并且没有错误很难,看到那么多红名的一个小时不到就把这题a了,这就是红名和蓝名的差距么!!!什么时候哥才能红名呢。。。。
#include<iostream>#include<vector>#include<string>#include<cstring>#include<cstdio>#include<map>#include<iomanip>#include<queue>using namespace std;const int maxn=6001111;struct zz{ int temp; int sum,s2; int m4,m7; int lend,rend; }zx[maxn],tz;int n,m,x,y;char sc[11];char s[maxn];char xx; void down(int id);void up(int id){ if(id*2<maxn) { down(id<<1); } if(id*2+1<maxn) { down(id<<1|1); } zx[id].sum = max(zx[id<<1].sum + zx[id<<1|1].m7 , zx[id<<1].m4 +zx[id<<1|1].sum ); zx[id].s2 = max(zx[id<<1].s2 + zx[id<<1|1].m4 , zx[id<<1].m7 + zx[id<<1|1].s2 ); zx[id].m7 = zx[id<<1].m7 + zx[id<<1|1].m7; zx[id].m4 = zx[id<<1].m4 + zx[id<<1|1].m4; return ; }void down(int id){ if(id<maxn && zx[id].temp == 1 ) { zx[id].temp = 0; swap(zx[id].s2,zx[id].sum); swap(zx[id].m4,zx[id].m7); if( zx[id<<1].temp == 1) { zx[id<<1].temp = 0; } else { zx[id<<1].temp = 1; } if( zx[id<<1|1].temp == 1) { zx[id<<1|1].temp = 0; } else { zx[id<<1|1].temp = 1; } } return ;}void build(int l=1 , int r=n , int id = 1){ zx[id].lend = l; zx[id].rend = r; zx[id].temp = 0; if( r == l ) { xx = s[r-1]; if(xx == '4') { zx[id].m4 = 1; zx[id].m7 = 0; zx[id].sum = 1; zx[id].s2 = 1; } else if(xx == '7' ) { zx[id].m4 = 0; zx[id].m7 = 1; zx[id].sum = 1; zx[id].s2 = 1; } return ; } else { int mid = (l+r) >> 1; build(l,mid,id<<1); build(mid+1,r,id<<1|1); up(id); } return ;}void update(int l,int r,int id = 1){ down(id); if( l<=zx[id].lend && zx[id].rend <= r ) { if(zx[id].temp==1) { zx[id].temp =0; } else { zx[id].temp= 1; } down(id); return ; } if( id*2<maxn && l <= zx[id<<1].rend ) { update(l,r,id<<1); } if( id*2+1<maxn && r >= zx[id<<1|1].lend ) { update(l,r,id<<1|1); } up( id ); return ;}int main(){ while(cin>>n>>m) { scanf("%s",&s); build(); for(int i=1;i<=m;i++) { scanf("%s",sc); if(sc[0]=='c') { printf("%d\n",zx[1].sum); } else { scanf("%d%d",&x,&y); update(x,y); } } } return 0;}
- Codeforces Round #104 (Div. 1) E Lucky Queries
- Cf Round #104 (Div. 1) E Lucky Queries 线段树
- Codeforces Round #104 (Div. 2) E - Lucky Subsequence
- Codeforces Round #104 (Div. 2) E Lucky Subsequence
- codeforces 145E - Lucky Queries
- codeforces 145E Lucky Queries
- Codeforces Beta Round #91 (Div. 2 Only)-E. Lucky Permutation
- Codeforces Round #163 (Div. 2) E. More Queries to Array...
- Codeforces Round #104 (Div. 2)---A. Lucky Ticket
- Codeforces Round #183 (Div. 1)Lucky Permutation Triple
- 【线段树延迟更新】Codeforces Round #104 (Div. 1) E
- Codeforces Round #104 (Div. 2) //缺E
- [Codeforces Round #325][Div.1 E]
- Codeforces Round #347 (Div. 1) E
- Codeforces Round #323 (Div. 1) E
- Codeforces Round #200 Div.1 E tree
- Codeforces Round #371 (Div. 1)A Sonya and Queries
- Educational Codeforces Round 19 E. Array Queries
- HDU3926 Hand in Hand, 图形同构判断
- db2命令
- 1530. The Seven Percent Solution
- vc中各种类型字符串的转换 CComBSTR Char BSTR LPSTR LPCTSTR LPWSTR
- python调试
- Codeforces Round #104 (Div. 1) E Lucky Queries
- 2012年最新英语学习网站
- 如何解决错误:Android.Process.Acore 异常终止错误
- LINUX内存管理
- windows下oracle10g服务启动时并不启动实例的方法之一
- C#主要控件名简写对照表
- linux netstat
- unity的js脚本转c#的工具
- poj 2002 Squares 【stl二分】