奇怪的題目背景
所誤入的 是回憶的教室
所響起的 是通向絕望的計時器
所到達的 是開始的結束
你 能相信嗎?
題目背景
最近禮奈醬學會了線段樹和樹狀陣列兩種資料結構
由於禮奈醬上課聽的很認真,所以她知道
樹狀陣列常見的操作是 單點加區間求和
線段樹常見的操作是 區間加區間求和
但她認為自己已經不是小學生了,覺得只能維護加法標記這件事簡直太蠢了~
所以她將題目加強了一下,但她發現自己不會寫這題的標程了
因為 rina
rina
醬非常可愛,所以你要幫她寫這題的標程
題意描述
禮奈給了你一列數(nn個)
要求支援以下兩類操作共mm次
1.區間求和 [l,r]
[l,r]
即∑ r i=l a i
∑i=lrai
2.區間開平方[l,r]
[l,r]
即將區間內每乙個數a i
ai修改為 a i − − √
ai向下取整
輸入輸出格式
第一行 n
n第二行 m
m第三行n
n個數 表示 a i
ai接下來mm行
每行三個數 op,l,r
op,l,r
op=1
op=1
為1操作
op=2
op=2
為2操作
對於每次1操作,請輸出一行答案
樣例輸入
41 100 5 5
51 1 2
2 1 2
1 1 2
2 2 3
1 1 4
樣例輸出
10111
11資料範圍
所有資料點保證
n,m≤2∗10 6 ,a i ≤10 9
n,m≤2∗106,ai≤109
#include using namespace std;
#define int long long
int n,m;
int l[10005],r[10005];
int a[100005];
int f[10005];
int w[100005];
signed main()
r[cnt]=n;
for(int i=1;i<=cnt;++i)
}if(flag==0)
}for(int i=1;i<=n;++i)
scanf("%lld",&m);
int x,y,z;
for(int i=1;i<=m;++i)
continue;
}for(int j=y;j<=r[w[y]];++j)
for(int j=l[w[z]];j<=z;++j)
for(int j=w[y]+1;j<=w[z]-1;++j)
else
int sum=0;
for(int k=l[j];k<=r[j];++k)
}if(sum==r[j]-l[j]+1)}}
}else
printf("%lld\n",ans);
continue;
} if(f[w[y]]==1)
else
}if(f[w[z]]==1)
else
}for(int j=w[y]+1;j<=w[z]-1;++j)
else}}
printf("%lld\n",ans);}}
return 0;
}
UOJ 511 秋蟬鳴泣之時 禮
上次出的題被巨佬們看出原題,而且一開始n和m的順序出鍋了我感到很抱歉 其實還有很多運算都有這種神奇的性質!區間取尤拉函式,區間取約數個數 這也是一道經典題吧不知道有沒有原題 最近詩音也開始學線段樹了 她對這種區間修改的題很感興趣 於是她又自己出了一道 由於詩音很可愛,所以你要幫她寫這題的標程 詩音給...