[μ½λνΈλ¦¬ μ‘°λ³κ³Όμ ] Preprocessing
μκ°μ μ€μΌ μ μλ λ°©λ²μ€ νλλ‘ μ€λͺ λλ μ μ²λ¦¬μ΄λ€.
μ μ²λ¦¬λΌλ λ¨μ΄μ μλ―Έμ κ°μ΄ μ λ ₯λ°μ λ°μ΄ν°μ λν΄ μ μ μ μΌλ‘ μ²λ¦¬νμ¬ μμ νμμ νΌν μ μλλ‘ νλ λ°©λ²μ΄λ€.
λ¬Έμ 1) κ΄νΈ μ λ§λ€μ΄μ£ΌκΈ°

λ¨μ λͺ¨λ κ²½μ°μ μλ₯Ό νμνλ©΄ λͺ¨λ μΈλ±μ€λ₯Ό νμνλ©΄μ μ¬λ κ΄νΈκ° λκ°μΈ μμμ μ μ°Ύκ³ , λ«λ κ΄νΈκ° λκ°μΈ λ μ μ μ λΆ μ°Ύμμ ν΄μΌλλ€. μ΄λ (((()))), (())(())μ κ°μ κ²½μ°κ° μ΅μ μ κ²½μ°λ‘ μκ°ν μ μλλ°, ((μ μ‘κ³ ))μ μ°ΎκΈ°μν΄ λͺ¨λ μΈλ±μ€λ₯Ό νμνλ κ³Όμ μμ μκ°λ³΅μ‘λλ O(N^2)κ° λμ€κ² λλ€.
sol1) λμ ν© μμ© μ μ²λ¦¬
λμ ν©μ λμμ νΉμ μΈλ±μ€ μ€λ₯Έμͺ½μ ))μ κ°μλ‘ νλ€.
( ( ) ) ( ( ) ) ( ( ) ) μ κ°μ μμκ° μλ€κ³ νμ.
μΈλ±μ€μ μμμΌλ‘ ))μ λμ κ°μλ₯Ό μ±μ°λ©΄
3 3 3 2 2 2 2 1 1 1 1 0 μ΄ λλ€.
((μ ))κ° μμ μ΄λ£¨λ―λ‘ μ²μ μ λ ₯λ°μ λ¬Έμμ΄μ μμ°¨μ μΌλ‘ νμνλ©° ((κ° λμ¬ κ²½μ° λμ κ°μλ₯Ό μ 체 μ λ΅μ ν©ν΄μ£Όλ©΄ λλ€.
#include <iostream>
#include <string>
#include <queue>
#include <algorithm>
using namespace std;
string a;
queue<int>b1, b2;
long long ans;
int main() {
cin>>a;
for(int i=1; i<a.size(); i++) {
if(a[i] == '(' && a[i-1] == '(')
b1.push(i);
if(a[i] == ')' && a[i-1] == ')')
b2.push(i-1);
}
while(!b1.empty()) {
int cur = b1.front(); b1.pop();
while(b2.front() < cur && !b2.empty()) {
b2.pop();
}
if(b2.empty())
break;
ans += b2.size();
}
cout<<ans;
return 0;
}
λλ ((μ ))κ° λ°μνλ κ²½μ°μ μΈλ±μ€λ₯Ό μ λΆ μ μ₯νκ³ )) queueμ frontκ° ((μ μΈλ±μ€λ³΄λ€ μλ€λ©΄ λΉΌμ£Όκ³ )) queueμ sizeλ₯Ό λνλ λ°©μμΌλ‘ ꡬννμλ€.
λ¬Έμ 2) μ΄μν νν

νΉμ λ²νΈλ₯Ό κ°μ§ ννμ΄ κ°μ₯ μ΅κ·Ό μ΄λ μΈλ±μ€μ μ λ ₯μ΄ λ€μ΄μλμ§ λ―Έλ¦¬ 체ν¬ν΄λμΌλ©΄ λλ€.
ννμ 무쑰건 μμλλ‘ λ€μ΄μ€κ³ , K 거리 μ΄λ΄μ μλ κ°μ λ²νΈλ₯Ό κ°μ§ ννλ€μ 무쑰건 κ°μ₯ μ΅κ·Ό λ€μ΄μ¨ ννκ³Ό μ°κ΄μ΄ λλ€.
κ·Έλ¬λ―λ‘ κ°μ₯ μ΅κ·Ό λ€μ΄μ¨ κ°μ λ²νΈμ ννμ 체ν¬νκ³ , K μ΄νμΈμ§ νμΈνλ©΄ λλ€.
#include <iostream>
#include <algorithm>
using namespace std;
int N, K, bomb[1000001], ans;
int main() {
cin>>N>>K;
for(int i=1; i<=N; i++) {
int bnum; cin>>bnum;
if(!bomb[bnum]) bomb[bnum] = i;
else if(i - bomb[bnum] <= K) ans = max(ans, bnum);
else bomb[bnum] = i;
}
if(!ans) cout<<-1;
else cout<<ans;
return 0;
}
λ¬Έμ 3) μ΅μ μλμ§ λΉμ©


그리λ λλμ νμ΄λ₯Ό μꡬνλ λ¬Έμ μ΄λ€.
νΉμ μ§μ μ λλ¬νκΈ° μν μ΅μ μ½μ€νΈλ νΉμ μ§μ μ΄μ μ μλ λ€λ₯Έ μ§μ λ€ μ€μ κ°μ₯ μμ μ½μ€νΈλ₯Ό κ°μ§ μ§μ μμ μλμ§λ₯Ό μ±μ κ°μ Έμ€λ λ°©λ²μ΄λ€.
κ·Έλ¬λ―λ‘ νΉμ μ§μ μ ν΄λΉνλ μΈλ±μ€μ νΉμ μ§μ κΉμ§μ λͺ¨λ μ§μ μ μ΅μ μ½μ€νΈλ₯Ό μ μ₯νκ³ , λͺ¨λ μ§μ μ¬μ΄μ μλμ§ κ°μ κ³±ν΄μ£Όλ©΄ λλ€.
#include <iostream>
using namespace std;
long long N, energy[100001], cost[100001], dp[100001], ans;
int main() {
cin>>N;
for(int i=0; i<N-1; i++) cin>>energy[i];
for(int j=0; j<N; j++) cin>>cost[j];
dp[0] = cost[0];
for(int i=1; i<N-1; i++) {
dp[i] = min(cost[i], dp[i-1]);
}
for(int i=0; i<N-1; i++) {
ans += energy[i]*dp[i];
}
cout<<ans;
return 0;
}