Codeforces 914D - Bash and a Tough Math Puzzle 線段樹,區間GCD

題意:

兩個操作,

單點修改

詢問一段區間是否能在至多一次修改后,使得區間$GCD$等于$X$

?

題解:

正確思路;

線段樹維護區間$GCD$,查詢$GCD$的時候記錄一共訪問了多少個$GCD$不被X整除的區間即可,大于一個就NO

要注意的是,如果真的數完一整個區間,肯定會超時,因此用一個外部變量存儲數量,一旦超過一個,就停止整個查詢

#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
using namespace std;
int casn,n,m,k;
class segtree{
#define nd  node[now]
#define ndl node[now<<1]
#define ndr node[now<<1|1]public:struct segnode {int l,r;ll gcd,mn;int mid(){return (r+l)>>1;}int len(){return r-l+1;}void update(int x){mn=gcd=x;}};vector<segnode> node;int cnt;segtree(int n) {node.resize(n<<2|3);maketree(1,n);}void pushup(int now){nd.gcd=__gcd(ndl.gcd,ndr.gcd);nd.mn=min(ndl.mn,ndr.mn);}void pushdown(int now){}void maketree(int s,int t,int now=1){nd={s,t,0,0};if(s==t){ll x;cin>>x;nd.update(x);return ;}maketree(s,nd.mid(),now<<1);maketree(nd.mid()+1,t,now<<1|1);pushup(now);}void update(int pos,ll x,int now=1){if(pos>nd.r||pos<nd.l) return ;if(nd.len()==1){nd.update(x);return ;}pushdown(now);update(pos,x,now<<1); update(pos,x,now<<1|1);pushup(now);}int query(int s,int t,ll x){cnt=0;count(s,t,x);return cnt<=1;}void count(int s,int t,ll x,int now=1){if(cnt>1||s>nd.r||t<nd.l||nd.gcd%x==0) return ;if(nd.len()==1) {cnt++; return ;}count(s,t,x,now<<1);count(s,t,x,now<<1|1);}
};int main() {IO;cin>>n;segtree tree(n);cin>>m;while(m--){ll a,b,c,d;cin>>a;if(a==1) {cin>>b>>c>>d;if(tree.query(b,c,d)) cout<<"YES"<<endl;else cout<<"NO"<<endl;}else {cin>>b>>c;tree.update(b,c);}}return 0;
}

?

錯誤思路(會WA8):

如果要修改一次使得$GCD$等于$X$,肯定是修改區間的最小值,線段樹維護即可

錯誤原因在于,$GCD$大于$X$的時候,最小值可能是$X$的倍數,此時不應該修改最小值

#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
#define per(ii,a,b) for(int ii=b;ii>=a;--ii)
#define forn(ii,x) for(int ii=head[x];ii;ii=e[ii].next)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define inline inline __attribute__(                               \
(always_inline, __gnu_inline__, __artificial__))                   \
__attribute__((optimize("Ofast"))) __attribute__((target("sse"))) \
__attribute__((target("sse2"))) __attribute__((target("mmx")))
#define show(x) cout<<#x<<"="<<x<<endl
#define show2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl
#define show3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl
#define show4(w,x,y,z) cout<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl
#define show5(v,w,x,y,z) cout<<#v<<" "<<v<<" "<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl
#define showa(a,b) cout<<#a<<'['<<b<<"]="<<a[b]<<endl
using namespace std;
const int maxn=1e6+10,maxm=2e6+10;
const ll INF=0x3f3f3f3f3f3f;
const int mod=1e9+7;
const double PI=acos(-1.0);
//head
int casn,n,m,k;
int num[maxn];
class segtree{
#define nd  node[now]
#define ndl node[now<<1]
#define ndr node[now<<1|1]public:struct segnode {int l,r;ll gcd,mn;int mid(){return (r+l)>>1;}int len(){return r-l+1;}void update(int x){mn=gcd=x;}};vector<segnode> node;segtree(int n) {node.resize(n<<2|3);maketree(1,n);}void pushup(int now){nd.gcd=__gcd(ndl.gcd,ndr.gcd);nd.mn=min(ndl.mn,ndr.mn);}void pushdown(int now){}void maketree(int s,int t,int now=1){nd={s,t,0,0};if(s==t){ll x;cin>>x;nd.update(x);return ;}maketree(s,nd.mid(),now<<1);maketree(nd.mid()+1,t,now<<1|1);pushup(now);}void update(int pos,ll x,int now=1){if(pos>nd.r||pos<nd.l) return ;if(nd.len()==1){nd.update(x);return ;}pushdown(now);update(pos,x,now<<1); update(pos,x,now<<1|1);pushup(now);}ll query_minid(int s,int t,int now=1){if(nd.len()==1) return s;if(ndl.mn<=ndr.mn) return query_minid(s,t,now<<1);else return query_minid(s,t,now<<1|1);}ll query_min(int s,int t,int now=1){if(s>nd.r||t<nd.l) return INF;if(s<=nd.l&&nd.r<=t) return nd.mn;return min(query_min(s,t,now<<1),query_min(s,t,now<<1|1));}ll query_gcd(int s,int t,int now=1){if(s>nd.r||t<nd.l) return 0;if(s<=nd.l&&t>=nd.r)return nd.gcd;return __gcd(query_gcd(s,t,now<<1),query_gcd(s,t,now<<1|1));}
};int main() {
//#define test
#ifdef testauto _start = chrono::high_resolution_clock::now();freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
#endif
//    IO;cin>>n;segtree tree(n);cin>>m;while(m--){ll a,b,c,d;cin>>a;if(a==1) {cin>>b>>c>>d;int id=tree.query_minid(b,c);ll mn=tree.query_min(b,c);tree.update(id,d);if(tree.query_gcd(b,c)==d)cout<<"YES"<<endl;else cout<<"NO"<<endl;tree.update(id,mn);}else {cin>>b>>c;tree.update(b,c);}}return 0;
}

?

轉載于:https://www.cnblogs.com/nervendnig/p/10227074.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249873.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Country Road Aizu - 2104

題目鏈接&#xff1a; https://vjudge.net/problem/Aizu-2104 題解&#xff1a; 咋說啊&#xff0c;一言難盡&#xff0c;花了半小時寫出來的&#xff0c;卡了十分鐘才恍然大明白是排序。 具體就是讓每個村子都通上電&#xff0c;變壓器在的村子&#xff0c;與變壓器連線點線長…

touchWX使用 echarts

<button bindtap"init" wx:if"{{!isLoaded}}">加載圖表</button><button bindtap"dispose" wx:if"{{isLoaded && !isDisposed}}">釋放圖表</button><ec-canvas het"200" classmy_echart…

vue init webpack vue-demo01復雜安裝的詳解

終端cmd,在項目中輸入下面命令&#xff1a; E:\Vue>vue init webpack vuedemo02 接著就會讓你輸入或者選擇一些是不是要的東西 ? Project name vuedemo02(項目名稱) ? Project description A Vue.js project(描述&#xff0c;我默認了) ? Author simalinjia(作者名稱) ?…

JAVA EE 基本了解

1、 為什么需要JavaEE 我們編寫的JSP代碼中&#xff0c;由于大量的顯示代碼和業務邏輯混淆在一起&#xff0c;彼此嵌套&#xff0c;不利于程序的維護和擴展。當業務需求發生變化的時候&#xff0c;對于程序員和美工都是一個很重的負擔。 為了程序的易維護性和可擴展性&#xf…

vue-cli中config目錄下的index.js文件詳解

// see http://vuejs-templates.github.io/webpack for documentation. // path是node.js的路徑模塊&#xff0c;用來處理路徑統一的問題 var path require(path)module.exports { // 下面是build也就是生產編譯環境下的一些配置build: { // 導入prod.env.js配置文件&#xf…

Business Intelligence——SSIS項目從創建到部署的簡單總結(二)

在上一篇博客中&#xff0c;我們成功的把包導進了SQL Server中&#xff0c;那么接下來我們就為其創建作業&#xff0c;使數據庫能夠自動執行我們的任務。首先&#xff0c;我們需要啟動“SQL Server 代理”。如圖1&#xff1a;圖1在“SQL Server 代理”的子節點中&#xff0c;選…

我的vscode配置 利用Settings Sync一鍵安裝

{"prettier.eslintIntegration": true, // 點擊保存時&#xff0c;根據 eslint 規則自定修復&#xff0c;同時集成 prettier 到 eslint 中"prettier.semi": false, //去掉代碼結尾的分號"prettier.singleQuote": true, //使用帶引號替代雙引號&q…

IdentityServer4【QuickStart】之使用asp.net core Identity

使用asp.net core Identity IdentityServer靈活的設計中有一部分是可以將你的用戶和他們的數據保存到數據庫中的。如果你以一個新的用戶數據庫開始&#xff0c;那么&#xff0c;asp.net core Identity是一個選擇。這個示例演示了如何在IdentityServer中使用asp.net core Ientit…

vue demo1

1.開發工具 試過sublime&#xff0c;現在轉戰vscode&#xff0c;覺得很順手&#xff0c;總之啥工具習慣就好。 vscode用著不錯的插件&#xff0c;推薦安裝。 2.項目目錄介紹 vue-cli生成的項目目錄有點多&#xff0c;初看有點懵&#xff0c;梳理一下會好很多。 ├── ind…

mysql日志介紹

1. 錯誤日志 錯誤日志記錄的事件&#xff1a; a. 服務器啟動關閉過程中的信息 b. 服務器運行過程中的錯誤信息 c. 事件調試器運行一個事件時間生的信息 d. 在從服務器上啟動從服務器進程時產生的信息 2. 查詢日志 查詢日志記錄查詢語句與啟動時間&#xff0c;建議不是在調試環境…

Mac OS X終端的常用操作命令(UNIX指令)

用了十多年windows&#xff0c;終于換了個高配Mac,俗話說 無論前端還是后端最終還是走向了linux&#xff0c;無論是換了多少臺PC最終都會走向Mac。不學習命令行用什么Mac? 干就完了~ pwd 顯示現在的文件路徑 &#xff08;print working directory&#xff09; ls 顯示…

索引( index )

索引在龐大的數據庫上最能體現出作用&#xff0c;所謂索引就是根據需求將指定的列提取出來做索引表&#xff0c;可以顯著提高在查找數據方面的速度。 在索引的前提下還可以指定索引值是否唯一&#xff0c;索引值是單列或是多列索引。 根據索引類型&#xff0c;索引分為&#xf…

dependencies 和 devDependencies 區別

當我們項目需要下載一個模塊的時候&#xff0c;我們安裝npm包&#xff08;在項目目錄下面npm install module_name&#xff09;的時候&#xff0c;很多時候我們會在后面加上–save-dev 或 –save。這兩個參數代表什么呢&#xff1f; 初識 相信很多人都會回答&#xff1a; np…

CentOS下防御或減輕DDoS攻擊方法(轉)

查看攻擊IP 首先使用以下代碼&#xff0c;找出攻擊者IP netstat -ntu | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -n 將會得出類似如下的結果&#xff1a; 1 114.226.9.132 1 174.129.237.157 1 58.60.118.142 1 Address 1 servers) 2 118.26.131.78 3 123.125.1…

iTerm2 快捷鍵

Ctrl a&#xff1a;將光標移動到命令行首 Ctrl e&#xff1a;將光標移動到命令行尾 Ctrl w&#xff1a;刪除光標前的一個單詞 Ctrl u&#xff1a;刪除所有內容 Ctrl y&#xff1a;粘貼上次刪除的內容 Ctrl r&#xff1a;搜索歷史命令刪除光標之前的單詞&#xff1a;ctrl …

vscode - 添加背景圖片

首先&#xff0c;CtrlShiftP安裝backround &#xff0c; 而后重啟vscode會有默認的背景圖片 修改背景圖&#xff0c;可自定義三張 具體請看gif圖 最開始時&#xff0c;發現png根本不是全透明&#xff0c;用ps處理了一下&#xff08;下列所有操作均字母組合&#xff09; 1.1 Ctr…

架構設計雜談004——架構師

什么是架構設師 架構師是&#xff1a;負責系統架構設計的人、團隊或組織 架構師主要干什么 ●架構師是技術領導&#xff0c;領導并負責架構設計&#xff0c;負責做決策 ●架構師可以是團隊或組織&#xff0c;這個時候通常會有首席架構師 ●架構師必須掌握足夠的技術知識 ●架構…

學習JS基本數據類型與對象的valueOf方法

https://blog.csdn.net/licheng11403080324/article/details/60128090 https://yq.aliyun.com/articles/399499 轉載于:https://www.cnblogs.com/smzd/p/9548530.html

security和oauth2.0的整合

security和oauth2.0的整合 之前已經介紹過security的相關的介紹,現在所需要做的就是security和oauth2.0的整合,在原有的基礎上我們加上一些相關的代碼;代碼實現如下: pom.xml: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http:…

關于Vue.use()詳解

問題 相信很多人在用Vue使用別人的組件時&#xff0c;會用到 Vue.use() 。例如&#xff1a;Vue.use(VueRouter)、Vue.use(MintUI)。但是用 axios時&#xff0c;就不需要用 Vue.use(axios)&#xff0c;就能直接使用。那這是為什么吶&#xff1f; 答案 因為 axios 沒有 install。…