未完成代码存档

#include <cstdio>
#define Max 100000

typedef long long LL;
struct node
{
    LL l,r,dis,flag,Min_value,Max_value,set,time_set,time_add;
}tr[Max<<2];
int max(LL a,LL b){return a>b?a:b;}
int min(LL a,LL b){return a>b?b:a;}
LL n,m,Time;
void up(LL k)
{
    tr[k].dis=tr[k<<1].dis+tr[k<<1|1].dis;
    tr[k].Max_value=max(tr[k<<1].Max_value,tr[k<<1|1].Max_value);
    tr[k].Min_value=min(tr[k<<1].Min_value,tr[k<<1|1].Min_value);
}
void build(LL k,LL l,LL r)
{
    tr[k].l=l;tr[k].r=r;
    if(l==r)
    {
        scanf("%lld",&tr[k].dis);
        tr[k].Max_value=tr[k].dis;
        tr[k].Min_value=tr[k].dis;
        return;
    }
    LL mid=(tr[k].l+tr[k].r)>>1;
    build(k<<1,l,mid);
    build(k<<1|1,mid+1,r);
    up(k);
}
void section_add(int k,int l,int r,int v)
{
    if(tr[k].l==l&&tr[k].r==r)
    {
        tr[k].dis+=(r-l+1)*v;
        tr[k].flag+=v;
        tr[k].time_add=++Time;
        return;
    }
    int mid=(tr[k].l+tr[k].r )>>1;
    if(l>mid) section_add(k<<1|1,l,r,v);
    else if(r<=mid) section_add(k<<1,l,r,v);
    else section_add(k<<1,l,mid,v),section_add(k<<1|1,mid+1,r,v);
    up(k);
}
void section_set(int k,int l,int r,int v)
{
    if(tr[k].l==l&&tr[k].r==r)
    {
        tr[k].dis=(r-l)*v;
        tr[k].set=v;
        tr[k].time_set=++Time;
        return;
    }
    int mid=(tr[k].l+tr[k].r)>>1;
    if(l>mid) section_set(k<<1|1,l,r,v);
    else if(r<=mid) section_set(k<<1,l,r,v);
    else section_set(k<<1,l,mid,v),section_set(k<<1|1,mid+1,r,v);
    up(k);
}
void pushdown(LL k)
{
    if(tr[k].l==tr[k].r) return;
    if(tr[k].time_add<tr[k].time_set)
    {
        tr[k<<1].set=tr[k].set;
        tr[k<<1|1].set=tr[k].set;
        tr[k<<1].dis=tr[k].set*(tr[k<<1].r-tr[k<<1].l+1);
        tr[k<<1|1].dis=tr[k].set*(tr[k<<1|1].r-tr[k<<1|1].l+1);
        tr[k<<1].time_set=tr[k].time_set;
        tr[k<<1|1].time_set=tr[k].time_set;
        tr[k<<1].time_add=tr[k].time_add;
        tr[k<<1|1].time_add=tr[k].time_add;
        tr[k].set=0;
        tr[k].flag=0;
        tr[k].time_add=0;
        tr[k].time_set=0;
    }
    if(tr[k].time_set<tr[k].time_add)
    {
        tr[k<<1].set=tr[k].set;
        tr[k<<1|1].set=tr[k].set;
        tr[k<<1].dis=tr[k].set*(tr[k<<1].r-tr[k<<1].l+1);
        tr[k<<1|1].dis=tr[k].set*(tr[k<<1|1].r-tr[k<<1|1].l+1);
        tr[k<<1].time_set=tr[k].time_set;
        tr[k<<1|1].time_set=tr[k].time_set;
        tr[k<<1].time_add=tr[k].time_add;
        tr[k<<1|1].time_add=tr[k].time_add;
        tr[k<<1].dis+=tr[k].flag*(tr[k<<1].r-tr[k<<1].l+1);
        tr[k<<1|1].dis+=tr[k].flag*(tr[k<<1|1].r-tr[k<<1|1].l+1);
        tr[k].set=0;
        tr[k].flag=0;
        tr[k].time_add=0;
        tr[k].time_set=0;
    }
}
LL query(LL k,LL l,LL r)
{
    if(tr[k].l==l&&tr[k].r==r) return tr[k].dis;
    if(tr[k].flag||tr[k].set) pushdown(k);
    LL mid=(tr[k].l+tr[k].r)>>1;
    if(l>mid) return query(k<<1|1,l,r);
    else if(r<=mid) return query(k<<1,l,r);
    else return query(k<<1,l,mid)+query(k<<1|1,mid+1,r);
    up(k);
}
LL query_max(LL k,LL l,LL r)
{
    if(tr[k].l==l&&tr[k].r==r) return tr[k].Max_value;
    if(tr[k].flag||tr[k].set) pushdown(k);
    LL mid=(tr[k].l+tr[k].r)>>1;
    if(l>mid) return query_max(k<<1|1,l,r);
    else if(r<=mid) return  query_max(k<<1,l,r);
    else return max(query_max(k<<1,l,mid),query_max(k<<1|1,mid+1,r));
    up(k);
}
LL query_min(LL k,LL l,LL r)
{
    if(tr[k].l==l&&tr[k].r==r) return tr[k].Min_value;
    if(tr[k].flag||tr[k].set) pushdown(k);
    LL mid=(tr[k].l+tr[k].r)>>1;
    if(l>mid) return query_min(k<<1|1,l,r);
    else if(r<=mid) return  query_min(k<<1,l,r);
    else return min(query_min(k<<1,l,mid),query_min(k<<1|1,mid+1,r));
    up(k);
}
int main()
{
    scanf("%lld%lld",&n,&m);
    build(1,1,n);
    char str[4];
    for(int x,y,z;m--;)
    {
        scanf("%s",str+1);
        if(str[1]==‘a‘)
        {
            scanf("%lld%lld%lld",&x,&y,&z);
            section_add(1,x,y,z);
        }
        else if(str[1]==‘s‘)
        {
            if(str[2]==‘e‘)
            {
                scanf("%lld%lld%lld",&x,&y,&z);
                section_set(1,x,y,z);
            }
            else if(str[2]==‘u‘)
            {
                scanf("%lld%lld",&x,&y);
                printf("%lld\n",query(1,x,y));
            }
        }
        else if(str[1]==‘m‘)
        {
            scanf("%lld%lld",&x,&y);
            if(str[2]==‘a‘)
                printf("%lld\n",query_max(1,x,y));
            else if(str[2]==‘i‘)
                printf("%lld\n",query_min(1,x,y));
        }
    }
    return 0;
}
/*
10 6
3 9 2 8 1 7 5 0 4 6
add 4 9 4
set 2 6 2
add 3 8 2
sum 2 10
max 1 7
min 3 6
*/
时间: 2024-08-10 02:11:45

未完成代码存档的相关文章

未完成代码存档 codevs 2905

#include <algorithm> #include <cstring> #include <cstdio> #include <map> #define Mod 13831 using namespace std; map<int,int>q; int n; struct Node { int point; char Name[101]; int Hash; }Team[7]; bool cmp(Node a,Node b) { retu

2015年4月15日未完成代码存档

1 #include<stdio.h> 2 int fib(int n) 3 { 4 int a=1,b=1,c; 5 if(n==1||n==2) return 1; 6 n-=2; 7 while(n--) 8 { 9 c=a+b; 10 a=b; 11 b=c; 12 } 13 return c; 14 } 15 16 int main() 17 { 18 int a,m,n,x,p; //a是第一站上车人数 p是第二站上车人数 m是最后一站下车人数 n是车站数 x是目标车站 19 in

codegame AI坦克大战第一届杯赛 AI代码存档

共享一下自己的AI代码(其实是有BUG的... var lastPosition = null var fmap = null var result = null var flag = 1 var fgo = 0 var forest0 = [12,3] var forest1 = [12,3] var head = { pre : null, dir : null, x : 0, y : 0, next : null } var handle = head; var last = head;

TLE代码存档

#include <ctype.h> #include <cstdio> #define N 200010 void read(int &x) { x=0; char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} } int M; struct Tree { int Fre,size,dis,fa; int child[2];

未完成代码

#include <cstring> #include <cstdio> struct node { char a[2005]; int b[2005]; int len; void reverse() { for(int i=0;i<len;++i) b[len-i+1]=a[i]-'0'; } bool operator - (node m)const { for(int i=1;i<=len;++i) { if(b[i]<0) b[i+1]=b[i+1]-b

结对项目代码复审

1. CheckingList General   Does the code work? Does it perform its intended function, the logic is correct etc. 可以运行.可以实现随机产生题目功能,无法实现判作业功能,逻辑正确,没有大的问题.生成的题目不但写在txt中还打印到控制台上了. Is all the code easily understood? 用的c语言语法,稍稍有些晦涩,没有注释,很难过. Does it conform

重构遗留代码(1):金牌大师

旧代码,丑陋的代码,复杂的代码,意大利面条似的代码,鬼话废话……就是四个字:遗留代码.这是一个系列文章,将有助于你处理并解决它. 在理想的世界中,你只会写新代码.你会把代码写得既漂亮又完美.你将永不会再看你的代码,并且你将永远不会维护一个有十年之久的项目.在理想的世界中… 不幸的是,我们生活在现实的而非理想的世界.我们必须理解修改和增强年代久远的代码这件事.我们必须处理遗留代码.那么你还在等什么?让我们一头扎进第一篇教程,拿着代码,读懂一点点,并为了我们日后的修改编织一张安全网. 遗留代码的定义

代码夹带是洪水猛兽吗?

什么是代码夹带 代码夹带是一个并不陌生的词组.一般的理解是在正常的代码中夹带入别有用心的其它代码. 通过网上搜索,得到如下: 其通常在计算机正常的程序传播当中将额外的一段代码夹带着,对计算机的网络安全造成破坏.从表面上看来,其不会对计算机进行主动攻击,但是只要安装了正常程序,而该程序... 知道任何保密条款也无法阻止员工夹带代码出去.您必须保证您是诚实的,稳定的;由于我们的程序非常复杂(仅PHP文本就3G),资深的程序员需要半年,才能了解代码的结构及.. 但某些组织里还有另外一种情况也被称为代码

洛谷 P1756 最小花费

题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 输入输出格式 输入格式: 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数. 以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费 (z<100). 最后一行输入两个正整数A,B.数据保证A与B之间可以直接或间接地转账. 输出格式