省赛end
出了一点点状况...但是幸好最后都很顺利><
第一次当裁判呢>.<
每次判CHD的队的时候,都希望是绿绿的Yes!!!
新的一周也继续干巴爹>.</
5.23
cf 316div2 c C - Replacement
今天才发现...这个是 360当时的笔试题..
不过当时的做法不太对,在cf上 Tle48 ... 笔试的时候过了(当时就觉得不对劲,,果然变弱数据了..)
Update的时候分几种情况讨论下就可以了
不过不会用线段树去写诶.............
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 7 const int maxn = 3e5+5; 8 char s[maxn]; 9 int n,m; 10 11 void solve(){ 12 int tot = 0; 13 for(int i = 1;i <= n;){ 14 int j = i; 15 if(s[i] != '.'){ 16 i++; 17 continue; 18 } 19 while(j <= n && s[j] == '.') j++; 20 tot += j-i-1; 21 i = j; 22 } 23 s[0] = 'a';s[n+1] = 'a'; 24 int pos; 25 char cmd; 26 int ans = tot; 27 for(int i = 1;i <= m;i++){ 28 scanf("%d %c",&pos,&cmd); 29 // printf("pos = %d cmd = %c\n",pos,cmd); 30 if(cmd == '.'){ 31 if(s[pos] != '.' && s[pos-1] == '.' && s[pos+1] == '.') ans+=2; 32 if(s[pos] != '.' && s[pos-1] == '.' && s[pos+1] != '.') ans++; 33 if(s[pos] != '.' && s[pos-1] != '.' && s[pos+1] == '.') ans++; 34 } 35 else{ 36 if(s[pos] == '.' && s[pos-1] == '.' && s[pos+1] == '.') ans -= 2; 37 if(s[pos-1] == '.' && s[pos] == '.' && s[pos+1] != '.') ans--; 38 if(s[pos-1] != '.' && s[pos] == '.' && s[pos+1] == '.') ans--; 39 } 40 s[pos] = cmd; 41 printf("%d\n",ans); 42 } 43 } 44 45 int main(){ 46 while(scanf("%d %d",&n,&m) != EOF){ 47 scanf("%s",s+1); 48 solve(); 49 } 50 return 0; 51 }
5.24
hdu 5701 中位数计数
枚举中位数,然后看区间和为0的区间有多少个(话说这个地方的写法没有遇到过诶..好好学)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 7 const int maxn = 1e4+5; 8 int a[maxn],n,sum[2*maxn]; 9 10 void solve(){ 11 for(int i = 1;i <= n;i++){ 12 int cnt = 0; 13 int ans = 0; 14 memset(sum,0,sizeof(sum)); 15 sum[maxn]++; 16 for(int j = i-1;j >= 1;j--){ 17 if(a[j] < a[i]) cnt--; 18 else cnt++; 19 sum[maxn+cnt]++; 20 } 21 ans += sum[maxn]; 22 cnt = 0; 23 for(int j = i+1;j <= n;j++){ 24 if(a[j] < a[i]) cnt--; 25 else cnt++; 26 ans += sum[maxn-cnt]; 27 } 28 29 printf("%d",ans); 30 if(i == n) printf("\n"); 31 else printf(" "); 32 } 33 } 34 35 int main(){ 36 while(scanf("%d",&n) != EOF){ 37 for(int i = 1;i <= n;i++) scanf("%d",&a[i]); 38 solve(); 39 40 } 41 return 0; 42 }