Contest1692 - 2019寒假集训第三十一场 UPC 11075 Problem D 小P的国际象棋

非常简单的单点修改+区间加+区间查询。我用的是最近刚学的区间修改版本树状数组。
  直接维护即可,注意修改后的单点值已经不是a[i],或者b[i],要通过区间查询求单点。不然是错的。

区间修改版本树状数组:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#define LL long long
using namespace std;
LL c_p[400005];
LL sum_p[400005];
LL c_y[400005];
LL sum_y[400005];
LL a[200005];
LL b[200005];
int n,m;
int cnt1;
int cnt2;
int lowbit(int x){
  return x&(-x);
}
void update(int x,int w,LL c[],LL sum[]){
  for (int i=x;i<=n;i+=lowbit(i)){
     c[i]+=(LL)w;
     sum[i]+=(LL)w*(x-1);
  }
}
LL sum(int x,LL c[],LL sum[]){
   LL ans=0;
   for (int i=x;i>0;i-=lowbit(i)){
    ans+=(LL)x*c[i]-sum[i];
   }
   return ans;
}
int main(){

  while(~scanf("%d%d",&n,&m)){
     a[0]=0;
     cnt1=0;
     cnt2=0;
     for (int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        update(i,a[i]-a[i-1],c_p,sum_p);
     }
     b[0]=0;
     for (int i=1;i<=n;i++){
        scanf("%lld",&b[i]);
        update(i,b[i]-b[i-1],c_y,sum_y);
     }
     int ss=0;
     while(m--){
        ss++;
        char op[10];
        char to;
        int x,y,w;
        scanf("%s",op);
        if (op[1]==‘i‘){
            scanf(" %c",&to);
            scanf("%d%d",&x,&y);
            if (to==‘P‘){
                int lw=sum(x,c_p,sum_p)-sum(x-1,c_p,sum_p);
                int rw=sum(y,c_p,sum_p)-sum(y-1,c_p,sum_p);
                update(x,rw-lw,c_p,sum_p);
                update(x+1,lw-rw,c_p,sum_p);
                update(y,lw-rw,c_p,sum_p);
                update(y+1,rw-lw,c_p,sum_p);
            }else {
                int lw=sum(x,c_y,sum_y)-sum(x-1,c_y,sum_y);
                int rw=sum(y,c_y,sum_y)-sum(y-1,c_y,sum_y);
                update(x,rw-lw,c_y,sum_y);
                update(x+1,lw-rw,c_y,sum_y);
                update(y,lw-rw,c_y,sum_y);
                update(y+1,rw-lw,c_y,sum_y);
            }
        }
        else if (op[1]==‘u‘){
            scanf(" %c",&to);
            int l,r;
            scanf("%d%d%d",&l,&r,&w);
            if (to==‘P‘){
                update(l,w,c_p,sum_p);
                update(r+1,-w,c_p,sum_p);
            }else {
                update(l,w,c_y,sum_y);
                update(r+1,-w,c_y,sum_y);
            }
        }else if (op[1]==‘t‘){
            scanf(" %c",&to);
            scanf("%d%d",&x,&y);
            if (to==‘P‘){
                w=sum(x,c_y,sum_y)-sum(x-1,c_y,sum_y);
                update(x,-w,c_y,sum_y);
                update(x+1,w,c_y,sum_y);
                update(y,w,c_p,sum_p);
                update(y+1,-w,c_p,sum_p);
            }else {
                w=sum(x,c_p,sum_p)-sum(x-1,c_p,sum_p);
                update(x,-w,c_p,sum_p);
                update(x+1,w,c_p,sum_p);
                update(y,w,c_y,sum_y);
                update(y+1,-w,c_y,sum_y);
            }
        }else {
           int l,r;
           scanf("%d%d",&l,&r);
           LL num_p=sum(r,c_p,sum_p)-sum(l-1,c_p,sum_p);
           LL num_y=sum(r,c_y,sum_y)-sum(l-1,c_y,sum_y);
           if (num_p>num_y){
             cnt1++;
             printf("P %lld\n",num_p);
           }else {
             cnt2++;
             printf("Y %lld\n",num_y);
           }
        }
     }
     if (cnt1>cnt2){
        printf("little P is winner!\n");
     }else if (cnt1<cnt2){
        printf("little Y is winner!\n");
     }else {
        printf("five five open\n");
     }
  }
  return 0;
}

留坑 :线段树版本:

原文地址:https://www.cnblogs.com/bluefly-hrbust/p/10421243.html

时间: 2024-10-09 00:39:28

Contest1692 - 2019寒假集训第三十一场 UPC 11075 Problem D 小P的国际象棋的相关文章

【2019寒假集训DAY2】图论

Dijkstra 条件:无负权:时间:O(n*n) 详解+模板: https://www.cnblogs.com/jason2003/p/7222182.html (模板)P1821 [USACO07FEB]银牛派对Silver Cow Party:https://www.luogu.org/recordnew/show/12339877 void dj(){ for(int i=1;i<=m;i++) if(i!=k)dis[i]=M; for(int i=1;i<=m;i++){ int

【2019寒假集训DAY1】背包问题

基本信息 金矿模型理解:http://www.cnblogs.com/sdjl/articles/1274312.html 适用条件: 重叠子结构.最优子问题.边界.子问题独立+转移方程式 背包九讲(结合题目):http://www.cnblogs.com/jbelial/articles/2116074.html 框架 01背包问题: 无优化 for(int i=1;i<=n;i++) { for(int c=0;c<=m;c++) { f[i][c]=f[i-1][c]; if(c>

“全栈2019”Java多线程第三十章:尝试获取锁tryLock()方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第三十章:尝试获取锁tryLock()方法详解 下一章 "全栈2019"Java多线程第三十一章:中断正在等待显式锁的线程 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复

“全栈2019”Java第三十一章:二维数组和多维数组详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十一章:二维数组和多维数组详解 下一章 "全栈2019"Java第三十二章:增强for循环Foreach语法 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Ja

题解报告(CDUT暑期集训——第三场)

题解报告(CDUT暑期集训--第三场) A - Problem A. Ascending Rating HDU - 6319 思路:单调队列板子题?(但是弱的一批的我还是不会用(有空补上 用的滑动窗口算法 按着题解的从后往前做(ps:菜是原罪 AC代码 #include<stdio.h> #include<iostream> #include<math.h> #include<algorithm> #include<string.h> #incl

2019杭电多校第九场

2019杭电多校第九场 熟悉的后半场挂机节奏,又苟进首页了,很快乐 1001. Rikka with Quicksort upsolved 不是我做的,1e9调和级数分段打表 1002. Rikka with Cake solved at 01:11 有一个矩形,给你很多射线(射线只有横平竖直的四个方向),问把矩形切成了多少块 队友说答案是交点数加一,作为一个合格的工具人,当然是把队友的想法实现啦 二维坐标离散化枚举纵坐标维护横坐标,常规套路,树状数组也可以做(我是线段树写习惯了根本没想起来还有

第三十一章

第三十章 以道佐人主,不欲以兵强于天下,其事好还.师之所居,荆棘生焉.大军之后,必有凶年.善者果而已,毋以取强焉.果而毋骄,果而勿矜,果而弗伐,果而不得已居,是谓果而不强.是谓果而不强.物壮而老,是谓之不道,不道早已. 第三十章1 国际形势紧张,看看老子是怎么评价战争的 各位朋友大家好,今天我们接着来聊<道德经>,我们看看老子带给我们什么样新的智慧了.今天开始我们进入了第三十章的学习,这也比较快,到第三十章了.在第三十章里,老子讲了他的军事思想,这在<道德经>里是一部分非常独特的内

醉笑陪君三万场 不诉离伤

2月13日,大年初六.早上7点多起来,拉开窗帘,想象中的明媚的阳光没照进来,抬眼望去的却是灰霾的天空.简要的收拾了下行李,今天要回上海,晚上7点的火车. 在家吃完早饭,母亲又开始帮我收拾行李,其实我都拣的差不多了,母亲想多装些吃的东西,水果糖瓜子之类,我不是很想带这么多吃的,一直叫母亲少装点,母亲不听,还嫌少,要多装些.期间接了个电话.我本意是中饭的时候给这位同学回个电话的.是我高中的一个女同学打过来的.今天本来去另一个同学家喝喜酒,刚好离她家比较近,所以说好,中午喝完喜酒下午去她家走走.但是由

三十一、Git中的fetch和pull

Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge     git fetch origin master git log -p master..origin/master git merge origin/master 以上命令的含义:   首先从远程的origin的master主分支下载最新的版本到origin/master分支上   然后比较本地的master分支和origin/master分支的差别