这套月赛题不是特别难

T1:离散化+单调队列,队列里出现数的种类不超过K+1,找最大的num[a[i]]

T2:一眼可以看出BFS+状压DP,还要SPFA预处理出各个块之间的dis

T3:线段树,没什么难度

 #include<stdio.h>
 #include<string.h>
 #include<algorithm>
 using namespace std;
 ;
 int n,K,a[maxn],b[maxn],m,ans,head,tail,q[maxn],vis[maxn],cnt;
 int main(){
     scanf("%d%d", &n, &K);
     ; i<=n; i++) scanf("%d", &b[i]),a[i]=b[i];
     sort(b+,b++n);
     m=unique(b+,b++n)-b-;
     ; i<=n; i++) a[i]=lower_bound(b+,b++m,a[i])-b;
     //for (int i=1; i<=n; i++) printf("%d\n", a[i]);
     head=tail=cnt=;
     ; i<=n; i++){
         if (!vis[a[i]]) cnt++;
         vis[a[i]]++; q[tail++]=i;
         ){
             vis[a[q[head]]]--; ) cnt--;
             head++;
         }
         ans=max(ans,vis[a[q[tail-]]]);
     }
     printf("%d\n", ans);
     ;
 }
 #include<stdio.h>
 #include<string.h>
 #include<algorithm>
 #include<queue>
 using namespace std;
 ;
 ]={,,,-};
 ]={,-,,};
 struct node{
     int x,y;
     node(int _x, int _y):x(_x),y(_y){}
 };
 <<][],dis[][],id[maxn][maxn],vis[maxn][maxn],cnt,stx[],sty[],N;
 char s[maxn][maxn];

 bool check(int x, int y){
      || y< || x>n || y>m) ; ;
 }

 void bfs(int sx, int sy, int num){
     queue<node> Q;
     Q.push(node(sx,sy)); id[sx][sy]=num;
     vis[sx][sy]=;
     while (!Q.empty()){
         int x=Q.front().x, y=Q.front().y; Q.pop();
         ; k<; k++){
             int tx=x+dx[k], ty=y+dy[k];
             if (check(tx,ty) && !vis[tx][ty] && s[tx][ty]=='X'){
                 vis[tx][ty]=; id[tx][ty]=num;
                 Q.push(node(tx,ty));
             }
         }
     }
 }

 void find_land(){
     cnt=;
     ; i<=n; i++)
         ; j<=m; j++)
             if (s[i][j]=='X' && !vis[i][j]){
                 bfs(i,j,++cnt);
                 stx[cnt]=i; sty[cnt]=j;
             }
 //    for (int i=1; i<=cnt; i++) printf("  %d %d\n", stx[i], sty[i]);
 }

 void spfa(int sx, int sy, int num){
     queue<node> Q;
     int next,cost; memset(d,0x3f,sizeof(d));
     memset(dis[num],0x3f,sizeof(dis[num]));
     Q.push(node(sx,sy)); d[sx][sy]=; vis[sx][sy]=; dis[num][num]=;
     while (!Q.empty()){
         int x=Q.front().x, y=Q.front().y; Q.pop();
         ; k<; k++){
             int tx=x+dx[k], ty=y+dy[k];
             if (!check(tx,ty) || s[tx][ty]=='.') continue;
             cost=(s[tx][ty]=='S');
             if (d[tx][ty]>d[x][y]+cost){
                 d[tx][ty]=d[x][y]+cost;
                 ){
                     vis[tx][ty]=;
                     Q.push(node(tx,ty));
                 }
             }
             if ((s[tx][ty]=='X') && ((next=id[tx][ty])!=num)) dis[num][next]=min(dis[num][next],d[tx][ty]);
         }
         vis[x][y]=;
     }
 }

 void dp(){
     N=(<<cnt);
     memset(f,0x3f,sizeof(f));
     ; i<=cnt; i++) f[(<<(i-))][i]=;
     ; s<N; s++){
         ; i<=cnt; i++) <<(i-)))
             ; j<=cnt; j++) <<(j-))))
                 f[s^(<<(j-))][j]=min(f[s^(<<(j-))][j],f[s][i]+dis[i][j]);
     }
     int ans=0x7fffffff;
     ; i<=cnt; i++) ans=min(ans,f[N-][i]);
     printf("%d\n", ans);
 }

 int main(){
     scanf("%d%d", &n, &m);
     ; i<=n; i++){
         scanf();
     }
     find_land();
     ; i<=cnt; i++)
         spfa(stx[i],sty[i],i);
     dp();
     ;
 }
 #include<stdio.h>
 #include<string.h>
 #include<algorithm>
 using namespace std;
 ;
 struct node{
     int l,r,len,lz,lm,rm,mx;
 }t[maxn*],now;
 int n,m,x,y,ans;
 ];

 void pushup(int x){
     t[x].lm=t[x<<].lm;
     ].lm==t[x<<].len) t[x].lm=t[x<<].len+t[x<<|].lm;
     t[x].rm=t[x<<|].rm;
     |].rm==t[x<<|].len) t[x].rm=t[x<<|].len+t[x<<].rm;
     t[x].mx=max(t[x<<].rm+t[x<<|].lm,max(t[x<<].mx,t[x<<|].mx));
 }

 void pushdown(int x){
     ){  //涂色
         t[x<<].lz=; t[x<<|].lz=;
         t[x<<].lm=t[x<<].rm=t[x<<].mx=;
         t[x<<|].lm=t[x<<|].rm=t[x<<|].mx=;
     }
     ){ //不涂色
         t[x<<].lz=; t[x<<|].lz=;
         t[x<<].lm=t[x<<].rm=t[x<<].mx=t[x<<].len;
         t[x<<|].lm=t[x<<|].rm=t[x<<|].mx=t[x<<|].len;
     }
     t[x].lz=;
 }

 node query(int x, int p){
     int l=t[x].l, r=t[x].r;
     pushdown(x);
     ].mx>=p) ,p);
     ].rm+t[x<<|].lm>=p){
         node ret;
         ret.l=t[x<<].r-t[x<<].rm+;
         ret.r=ret.l+p-;
         return ret;
     }|,p);
 }

 void update(int a, int b, int x, int c){
     int l=t[x].l, r=t[x].r;
     if (l==a && r==b){
         ){
             t[x].lz=;
             t[x].lm=t[x].rm=t[x].mx=;
         }
         ){
             t[x].lz=;
             t[x].lm=t[x].rm=t[x].mx=t[x].len;
         }
         return;
     }
     ;
     pushdown(x);
     ,c);
     |,c);
     ,c),update(mid+,b,x<<|,c);
     pushup(x);
 }

 void build(int l, int r, int x){
     t[x].l=l; t[x].r=r; t[x].len=r-l+;
     if (l==r){
         t[x].lz=; t[x].lm=t[x].rm=t[x].mx=;
         return;
     }
     ;
     build(l,mid,x<<);
     build(mid+,r,x<<|);
     pushup(x);
 }

 int main(){
     scanf("%d%d", &n, &m);
     build(,n,);
     //printf("%d\n", t[1].mx);
     while (m--){
         scanf("%s", opt);
         ]=='A'){
             scanf("%d", &x);
             ].mx<x) ans++;
             else{
                 now=query(,x);
                 //printf(" %d %d\n", now.l, now.r);
                 update(now.l,now.r,,);
             }
         }else{
             scanf("%d%d", &x, &y);
             update(x,y,,);
         }
     }
     printf("%d\n", ans);
     ;
 } 

bzoj3048+3049+3050的更多相关文章

  1. Bzoj索引

    1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...

  2. Hsql中In没有1000的限制

    SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  3. 存储过程数据insert into select

    create or replace procedure PRO_K3_CZZH (org_name in varchar2, --财政专户名称 opertype in varchar2, --操作类型 ...

  4. jqu

    1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...

  5. 7.12归来赛_B

    Prime Judge 时间限制 1000 ms 内存限制 65536 KB 题目描写叙述 众所周知.假设一个正整数仅仅能被1和自身整除,那么该数被称为素数.题目的任务非常easy.就是判定一个数是否 ...

  6. 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  7. POJ -3050 Hopscotch

    http://poj.org/problem?id=3050 给定一个5×5矩阵,问选6个数的不同排列总数是多少! 二维的搜索,注意要判重,数据量很小,直接用map就好. #include<cs ...

  8. hdu - 3049 - Data Processing(乘法逆元)

    题意:N(N<=40000)个数n1, n2, ..., nN (ni<=N),求(2 ^ n1 + 2 ^ n2 + ... + 2 ^nN) / N % 1000003. 题目链接:h ...

  9. LOJ 3049: 洛谷 P5284: 「十二省联考 2019」字符串问题

    题目传送门:LOJ #3049. 题意简述: 给定一个长度为 \(n\) 的母串 \(S\). 有 \(n_a\) 个 A 类串,都是 \(S\) 的子串,以区间的形式给出. 有 \(n_b\) 个 ...

随机推荐

  1. Linux 搭建Java web服务器

    未经允许,不得转载 1.jdk的下载与配置 1.1下载 sudo wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45- ...

  2. Python初学者应了解的技巧

    交换变量 x = 6 y = 5 x, y = y, x print x >>> 5 print y >>> 6 if 语句在行内 print "Hell ...

  3. Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence

    在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...

  4. WPF中运行时使内容可以上下左右被鼠标拖动应该怎么做?

    <Window x:Class="testGridSplitter.MainWindow" xmlns="http://schemas.microsoft.com/ ...

  5. 高性能缓存系统Redis安装与使用

    在互联网后台架构中,需要应付高并发访问数据库,很多时候都会在数据库上层增加一个缓存服务器来保存经常读写的数据以减少数据库压力,可以使用LVS.Memcached或Redis,Memcached和Red ...

  6. iOS 数据存储规则

    概观 iCloud的备份包括,它可以自动每天通过Wi-Fi备份用户的iOS设备.在您的应用程序的主目录都被备份,唯一的例外是应用程序本身捆绑,缓存目录和temp目录.购买的音乐,应用程序,电子书,相机 ...

  7. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  8. C++ 关键字浅谈

    这里有一个游戏:要求写一个符合C++标准的程序,包含至少十个连续而且不同的关键字.连续是指不能被标识符.运算符.标点符号分割.注意这里的“不同”要求,别想用 int main() { return s ...

  9. Java基础知识点4:继承

    继承是面向对象编程技术中非常重要的一个基本概念.它背后的基本思想就是:通过已有的类来创建一个新的类,这个新的类可以重用(或继承)已有的类方法:新的类也可以加入新的方法和属性. 在这里我们通过一个实例来 ...

  10. Android资源站

    用这个帖子记录下看到的好的android资源站 1.各种资源:http://appxcode.com/ 2.图标 2.1 http://www.easyicon.net 2.2 http://www. ...